如果您希望将多个连续的空白字符折叠成一个空格,那么您可以使用-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,} 使用quantifier 表示“匹配前面的元素至少两次”;因此,不会替换独立的空白字符。当输入字符串包含混合的空白字符时...
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
虽然两者都产生相同长度的字符串,但未规范化的替换使单个空格、单个制表符和单个换行符空白运行未修改。无论相邻的空白字符是否相同,这都是一样的。
其他文档