如何在PowerShell中编写匹配“|”的正则表达式4次?我的示例数据在“
下面| W|100003574 | 3|
| W|100003574 | 3| 89|
所以预期的输出将是
| W|100003574 | 3|
这里是我使用的代码,但它不起作用。
$getdata | Select-String -Pattern '^([|]{4})$' -allmatches
答案 0 :(得分:1)
您可以使用.Net regex获取结果
([regex]::matches($getdata, "^(\|[ \w]+){3}\|$", "Multiline") | %{$_.value})
答案 1 :(得分:1)
你的正则表达式只能匹配一条完全由4个管道组成的线路,这不是你想要的。
$getData | Where-Object{[regex]::matches($_,"\|").count -eq 4}
我只在这里使用正则表达式,因为它提供了一个非常简洁的解决方案。我仍然需要逃避管道,因为它是正则表达式中的特殊字符。这将返回所有具有4个管道符号的行。
仍使用正则表达式而非.Net方法的另一种解决方案
将字符串转换为char数组并尝试匹配管道字符。 -match
此处将返回所有匹配项的数组,因此我们仍然使用.Count
$getData | Where-Object{([char[]]$_ -match "\|").Count -eq 4}