我似乎找不到在这里尝试做的事的例子。
我有一个正则表达式列表,我正在搜索这些正则表达式以查找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();
谢谢您的帮助!
答案 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选项添加到存在的任何选项中。