删除powershell中的多个空白

我试图在powershell中找到一种方法来删除多个空白

但我发现的是如何在php中实现它。“删除多个空白”

可能会有类似的正则表达式可用

如何在powershell中实现同样的功能

我的绳子是这样的

Xcopy源代码设计

某些行在源和目标之间可能包含多个空格

如果您希望将多个连续的空白字符折叠到一个空格中,则可以使用-replace运算符执行此操作。鉴于

PS&gt$beforeReplace='[你好,世界!]'
PS&gt$更换前
[你好,世界!]
PS&gt$替换前。长度
29

…您可以这样调用-replace操作符

PS&gt$afterReplace=$BeforReplace-replace'\s+','
PS&gt$后更换
[你好,世界!]
PS&gt$后更换。长度
19

-replace的第一个参数是要匹配的正则表达式模式,第二个参数是将替换任何匹配项的文本\s将匹配一个空格字符,+指示匹配一个或多个匹配项,因此,换句话说,一个或多个相邻空格字符将替换为单个空格

无空白规范化的替换

如果您不需要将所有空白字符规范化为空格,因此独立的空白字符可以保持不变,那么对于长字符串,可能会看到此变体的性能更好

PS&gt$afterReplace=$BeforReplace-replace'\s{2,}','
PS&gt$后更换
[你好,世界!]
PS&gt$后更换。长度
19

\s{2,}使用了一个量词,意思是;至少将前面的元素匹配两次;;因此,不会替换独立的空白字符。当输入字符串混合包含空格字符时

PS&gt$beforeReplace="1空间:;2空间:;1选项卡:`t;2Tab:`t`t;换行:n;第二行:`n`n&引用;
PS&gt$更换前
1空间:;2空间:;1选项卡:;2标签:;1新行:
;2新线路:
;
PS&gt$替换前。长度
57

…请注意两种方法的结果如何不同

PS&gt$afterReplaceNormalized=$BeforReplace-replace'\s+','
PS&gt$后置换标准化
1空间:;2空间:;1选项卡:;2标签:;1新行:;第2行:;
PS&gt$长度
54
PS&gt$afterReplaceUnnormalized=$beforeReplace-replace'\s{2,}','
PS&gt$后置换非标准化
1空间:;2空间:;1选项卡:;2标签:;1新行:
;第2行:;
PS&gt$afterReplaceUnnormalized.长度
54

虽然这两个字符串的长度相同,但非规范化的替换会使单个空格、单个制表符和单个换行空白保持不变。无论相邻的空白字符是否相同,这都是一样的

附加文件

  • 输入有关\u比较\u运算符的帮助[Windows PowerShell 2.0][PowerShell(核心)]
  • 输入有关正则表达式的帮助[Windows PowerShell 2.0][PowerShell(核心)]
  • .NET正则表达式语言-快速参考

发表评论