我遇到了一个问题,我确信这是我在使用正则表达式和交替方法进行表达式匹配时忽略或不理解的一些简单的事情双空格和单空格。
我使用简写元\s|\s\s
字符电源外壳 -split
返回多个字符串对象,每个字符串对象都有一个单或双空格占一行,因此其他所有内容都按预期在自己的行上分割。
示例数据和 PowerShell 命令
笔记:不幸的是,这是我正在处理的数据的一个例子,我无法控制它,所以它会有单双空格两个都
$Content = "Data is over here
and here is some down under too"
$Content -split "\s|\s\s"
结果
Data is over here and here is some down under too
预期结果
Data is over here and here is some down under too
环境规格
- Windows 10 专业版 X64
- PowerShell 5.0
问题
我想了解我使用的正则表达式格式是怎么回事简写元字符交替语法但我会考虑解决办法如果我没有得到任何明确的答案,也是如此。
答案1
改用这个,这意味着出现一个或多个任何空白字符,如制表符、空格等等:
$Content -split "\s{1,}"
结果:
PS C:\WINDOWS\system32> $Content = "Data is over here
and here is some down under too"
$Content -split "\s{1,}"
Data
is
over
here
and
here
is
some
down
under
too
PS C:\WINDOWS\system32>
答案2
非常感谢宠物食品正如他在评论中指出的那样:“-split '\s\s|\s'
–宠物食品“
陷阱
我想有一个使用正则表达式替换时需要学习的重要一课那就是放置顺序可能非常重要。
原因
之所以不起作用,是因为表达式首先寻找单个空格字符,而这是一个问题,因为每次遇到有两个空格的地方,就会剩下一个。所以这就是为什么我在输出中看到几个空白行。
解决方案
我通过简单地切换交替内的位置并告诉它优先使用双空格而不是单空格来解决这个问题(即使用过\s\s|\s
但未使用过)\s|\s\s
) 因此它首先在两个空格处分割,如果没有双空格,它才会在一个空格处分割。
解决方案脚本
$Content = "Data is over here
and here is some down under too"
$Content
$Content -split "\s\s|\s"
结果
Data
is
over
here
and
here
is
some
down
under
too