我在尝试寻找一种在PowerShell中去除多个空格的方法。
但我发现的是如何在PHP中做到这一点。"Removing more than one white-space"
可能有类似的正则表达式可用。
如何在PowerShell中实现相同的效果?
我的字符串是这样的
Xcopy Source Desination
有些行可能在源和目标之间包含多个空格。
我在尝试寻找一种在PowerShell中去除多个空格的方法。
但我发现的是如何在PHP中做到这一点。"Removing more than one white-space"
可能有类似的正则表达式可用。
如何在PowerShell中实现相同的效果?
我的字符串是这样的
Xcopy Source Desination
有些行可能在源和目标之间包含多个空格。
-replace
运算符来完成。给定...PS> $beforeReplace = ' [ Hello, World! ] '
PS> $beforeReplace
[ Hello, World! ]
PS> $beforeReplace.Length
29
...你需要这样调用-replace
操作符...
PS> $afterReplace = $beforeReplace -replace '\s+', ' '
PS> $afterReplace
[ Hello, World! ]
PS> $afterReplace.Length
19
-replace
的第一个参数是用来匹配的正则表达式模式,第二个参数是将替换任何匹配项的文本。\s
将匹配空格字符,+
表示匹配一个或多个出现,因此,换句话说,一个或多个相邻的空格字符将被替换为单个空格。
如果您不需要将所有空格字符normalize为空格,因此独立的空格字符可以保持不变,则对于长字符串,使用这种变体可能会获得更好的性能...
PS> $afterReplace = $beforeReplace -replace '\s{2,}', ' '
PS> $afterReplace
[ Hello, World! ]
PS> $afterReplace.Length
19
\s{2,}
使用量词,意思是“匹配前面的元素至少两次”,因此单独的空格字符不会被替换。当输入字符串包含混合的空格字符时...PS> $beforeReplace = "1Space: ;2Space: ;1Tab:`t;2Tab:`t`t;1Newline:`n;2Newline:`n`n;"
PS> $beforeReplace
1Space: ;2Space: ;1Tab: ;2Tab: ;1Newline:
;2Newline:
;
PS> $beforeReplace.Length
57
请注意这两种方法的结果有所不同...
PS> $afterReplaceNormalized = $beforeReplace -replace '\s+', ' '
PS> $afterReplaceNormalized
1Space: ;2Space: ;1Tab: ;2Tab: ;1Newline: ;2Newline: ;
PS> $afterReplaceNormalized.Length
54
PS> $afterReplaceUnnormalized = $beforeReplace -replace '\s{2,}', ' '
PS> $afterReplaceUnnormalized
1Space: ;2Space: ;1Tab: ;2Tab: ;1Newline:
;2Newline: ;
PS> $afterReplaceUnnormalized.Length
54
help about_Comparison_Operators
[ Windows PowerShell 2.0 ] [ PowerShell (Core) ]help about_Regular_Expressions
[ Windows PowerShell 2.0 ] [ PowerShell (Core) ]-split 'Xcopy Source Destination' -join ' '
Xcopy Source Destination
'[ Hello, World! ]' -replace '^\[\s+','[' -replace '\s+]$',']' -replace '\s+',' '
Bacon有解释,PowerShell很有趣。我不得不用'\'
转义'['
,尽管我知道PowerShell的转义字符是`。
\
,但它只适用于 "
双引号字符串内,而不适用于你示例中的 '
单引号字符串,实际上这是正则表达式语法,其中 \\
是转义字符。 - Rob at TVSeries.com
Trim()
、TrimStart()
和/或TrimEnd()
是明显错误的答案,但如果不是这样的话,你认为是否有更友好的方式来表达? - travis