字符串分割方法:按包含空格的字符串进行分割

4

如果这是一个显而易见的问题,我很抱歉,但我已经尝试了很多方法来使它工作...在VB中(我更熟悉),我相信这将是可以的。

我正在尝试使用“ - ”分隔符拆分字符串。 空格非常重要,因为字符串中还有其他“-”,但不应该被分隔。

"This-string - contains - some-hyphens".Split(' - ')

这个(在我的脑海中)应该返回3个元素:

This-string
contains
some-hyphens

不幸的是,根据我使用Split方法的方式,我得到了9个或以上的元素。

This
string
contains
some hyphens

很明显它仅在-处拆分,但还似乎在空格上拆分,并忽略' - '格式。

主要 版本 号    构建号   修订版本号
-----  -----  -----  --------
5      1      17134  228
3个回答

5

您正在使用的String.Split方法重载接受char[],所以 Powershell 比较友好,会帮您将字符串分割。如果要使用一个字符串,需要传递 StringSplitOptions 参数:

'This-string - contains - some-hyphens'.Split((,' - '), [StringSplitOptions]::RemoveEmptyEntries)

在测试过程中,我需要使用一元数组运算符,来强制解析器使用正确的重载。


更符合PowerShell风格的方式是使用基于正则表达式的-split操作符:

'This-string - contains - some-hyphens' -split ' - '

谢谢。我使用了这个运算符,它完美地工作了。而且这个解释有助于理解。 - EndureChaos

2

正在发生的是基于字符数组进行拆分。因此,“ - ”就像被拆分为(“ ”,“-”)。

在PowerShell中,您可以使用-split。-Split将其视为完整字符串“ - ”。

"This-string - contains - some-hyphens" -split " - "

1
当您使用.split方法时,它会根据您提供的集合中的任何字符进行分割。这意味着您的结果将在空格或连字符上被分割。
如果您使用-split,则输入将被视为字符串而不是一组字符。
让我们看一个例子(如下所示)。
$foo = "This-string - contains - some-hyphens"
$bar = $foo -split(' - ')
$bar

以下是输出:

This-string
contains
some-hyphens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接