使用“匹配”的不区分大小写的正则表达式匹配

时间:2018-12-12 22:37:48

标签: regex powershell

我似乎找不到在这里尝试做的事的例子。

我有一个正则表达式列表,我正在搜索这些正则表达式以查找csv文件的每一行,并且如果所有内容均为大写,它们将非常有用。但是,我的搜索是区分大小写的,如果不使用?i修改每个正则表达式,就无法弄清楚如何使其不区分大小写。是否可以通过简单的方式修改我在这里所做的事情?

奖励积分!我正在搜索成千上万的正则表达式,这似乎需要很长时间。如果您碰巧知道一种更快的方式来搜索每行中的所有正则表达式,请分享。

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

谢谢您的帮助!

2 个答案:

答案 0 :(得分:2)

要加快速度,您可以在搜索之前做两件事:将整个文件读到内存并创建所有正则表达式对象...

$reList = $SearchList | ForEach-Object { [regex]$_ } # adapt the regex here

$lines = [System.IO.File]::ReadAllLines($CSVFile)

您真的需要数千个正则表达式吗?

新语法变为:

foreach($line in $lines) {
    foreach($re in $reList) {

    }
}

答案 1 :(得分:1)

将此行添加到foreach ($RX in $SearchList){内:

$RX = [regex]::new($RX,([regex]$RX).Options -bor [System.Text.RegularExpressions.RegexOptions]::IgnoreCase)

这确保$ RX是[regex]对象,并将IgnoreCase选项添加到存在的任何选项中。