如何修改此正则表达式以在Powershell中工作

时间:2016-05-05 14:04:25

标签: regex powershell

所以我有这个正则表达式https://regex101.com/r/xG8oX2/2,它给了我想要的匹配。

但是当我运行这个powershell脚本时,它没有给我任何匹配。我应该在这个正则表达式中修改什么才能在powershell中获得相同的匹配?

$pattern2 = '\d{4}\/\d{2}\/\d{2}.*]\s(?<reportHash>.*):.*Start.*\r*\n*.*\n.*ReportLayoutID=(\d{1,7})';
$reportLayoutIDList = Get-Content -Path bigOptions.txt | Out-String |
Select-String -Pattern $pattern2 -AllMatches |
Select-Object -ExpandProperty Matches |
Select-Object @{n="ReportHash";e={$_.Groups["reportHash"]}},
              @{n="LayoutID";e={$_.Groups["reportLayoutID"]}};$reportLayoutIDList | 
Export-csv reportLayoutIDList.csv;

2 个答案:

答案 0 :(得分:3)

问题在于您的换行符。在Windows中,换行符是CRLF(\r\n),而在UNIX等中,它们只是LF \n

因此,您需要修改输入以仅使用LF,或者需要在正则表达式中将\n替换为\r\n

正如@briantist所提到的,使用\r?\n将匹配任一方式。

答案 1 :(得分:0)

感谢Frode F和briantist。

这是在Powershell中使用的正则表达式模式:

$pattern2 = '\d{4}\/\d{2}\/\d{2}.*]\s(?<reportHash>.*):.*Start.*[\r?\n]*.*[\r?\n].*ReportLayoutID=(?<reportLayoutID>\d+)';