在为此苦苦挣扎了半个小时之后,我在用空格分割字符串时体验到了这种差异,具体取决于您使用的语法。
简单字符串:
$line = "1: 2: 3: 4: 5: "
拆分示例 1 - 请注意从 1 开始带有标记的额外空格:
$ln = $line.split(":\s+")
$ln
1
2
3
4
5
拆分示例 2 - 空格消失了(理应如此)
$ln = $line -split ":\s+"
$ln
1
2
3
4
5
我怀疑这是因为第一个是 .NET 方法(?),而 -split
PS 运算符在正则表达式解释方面可能具有更多内置智能。
但是,当我尝试使用诸如 ": "
之类的拆分的第一种方法时,它也无法正常工作。如果它是 .NET,它是否需要一些东西来正确解释它应该使用这两个字符作为分隔符的事实?
最佳答案
.Net System.String.Split方法没有采用单个字符串参数的重载。它也不理解正则表达式。
发生的情况是 powershell 正在获取您传入的字符串并将其转换为字符数组。它本质上是按以下字符进行分割::
、\
、s
、+
当您使用 ": "
作为分隔符时,我想您会得到类似
1
2
3
4
5
这是因为,如果不为 .Net 方法指定字符串分割选项,它将包含在相邻分隔符之间找到的空字符串。
关于Powershell split() 与 -split - 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23796959/