Нечувствительное к регистру сопоставление регулярных выражений с использованием «совпадений» - PullRequest
0 голосов
/ 13 декабря 2018

Я не могу найти пример того, что я пытаюсь сделать здесь.

У меня есть список регулярных выражений, которые я просматриваю для каждой строки файла 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 голосов
/ 13 декабря 2018

Чтобы ускорить его, перед поиском вы можете сделать две вещи: прочитать весь файл в память и создать все ваши объекты регулярных выражений ...

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

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

Вам действительно нужны тысячи регулярных выражений?

Новый синтаксис становится:

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

    }
}
0 голосов
/ 13 декабря 2018

Добавьте эту строку прямо внутри вашего foreach ($RX in $SearchList){:

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

Это гарантирует, что $ RX является объектом [regex], а также добавляет опцию IgnoreCase к любым имеющимся опциям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...