我正在搜索成千上万个正则表达式,而这似乎需要很长时间。如果您碰巧知道一种更快的方法来搜索每行中的所有正则表达式,那我就耳熟能详。
我需要捕获匹配的值,匹配的整行和行号。
$file = New-Object System.IO.StreamReader ($CSVFile) # Input Stream
while (($text = $file.ReadLine()) -ne $null ){
foreach ($RX in $SearchList){
foreach ($match in ([regex]$RX).Matches($text)) {
write-host "Match found: " $match.value -ForegroundColor Red
}
}
}
$file.close();
答案 0 :(得分:1)
在循环中对成千上万个正则表达式进行匹配将始终表现不佳。将您的单个正则表达式合并为一个
$re = $SearchList -join '|'
并像这样使用它:
(Get-Content $CSVFile) -match $re
或这样(如果输入文件太大而无法容纳到内存中):
Get-Content $CSVFile | Where-Object { $_ -match $re }
如果单个正则表达式太多而无法容纳一个大正则表达式,则需要找到一种减少其数量或将其中几个合并为更小,更通用的表达式的方法。要获得帮助,您需要向我们提供要与之匹配的表达式的代表性示例。