正则表达式匹配包含特定字符的字符串一定次数

时间:2016-02-20 14:52:09

标签: regex powershell

如何在PowerShell中编写匹配“|”的正则表达式4次?我的示例数据在“

下面
| W|100003574 |  3|
| W|100003574 |  3| 89|

所以预期的输出将是

| W|100003574 |  3|

这里是我使用的代码,但它不起作用。

$getdata | Select-String -Pattern '^([|]{4})$' -allmatches

2 个答案:

答案 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}
相关问题