加快正则表达式匹配

时间:2018-12-13 15:17:33

标签: regex powershell

我正在搜索成千上万个正则表达式,而这似乎需要很长时间。如果您碰巧知道一种更快的方法来搜索每行中的所有正则表达式,那我就耳熟能详。

我需要捕获匹配的值,匹配的整行和行号。

$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();

1 个答案:

答案 0 :(得分:1)

在循环中对成千上万个正则表达式进行匹配将始终表现不佳。将您的单个正则表达式合并为一个

$re = $SearchList -join '|'

并像这样使用它:

(Get-Content $CSVFile) -match $re

或这样(如果输入文件太大而无法容纳到内存中):

Get-Content $CSVFile | Where-Object { $_ -match $re }

如果单个正则表达式太多而无法容纳一个大正则表达式,则需要找到一种减少其数量或将其中几个合并为更小,更通用的表达式的方法。要获得帮助,您需要向我们提供要与之匹配的表达式的代表性示例。