Сопоставление числа строк в тексте с регулярным выражением любого порядка с использованием Python - PullRequest
0 голосов
/ 11 мая 2018

Я должен соответствовать конфигурации файловой системы из входного файла.Во входном файле я укажу регулярное выражение.Это регулярное выражение должно соответствовать выводу команды из брандмауэра.

Предположим, что вывод брандмауэра такой, как показано ниже

ssh 192.217.254.20 255.255.255.255 junk_string
ssh 192.217.248.0 255.255.252.0 junk_string
ssh 192.217.254.21 255.255.255.255 junk_string
ssh 192.217.254.25 255.255.255.255 junk_string
ssh 192.217.254.38 255.255.255.255 junk_string
ssh 192.217.254.42 255.255.255.255 junk_string
ssh 192.115.24.64 255.255.255.224 junk_string
ssh 192.217.240.0 255.255.252.0 junk_string
ssh 192.217.236.0 255.255.252.0 junk_string
ssh 192.217.255.78 255.255.255.255 junk_string

Я хочу сопоставить 9 строк, как указано в регулярном выражении.

(sh 192.217.((254.(20|21|25|38|42)|255.78) 255.255.255.255|(240|248|236).0 255.255.252.0) [^ ]*\r\n?){9}

Но правило не будет совпадать из-за7-я строка, когда я использую это регулярное выражение с re.match или re.search.

Есть ли способ проверить это регулярное выражение в любом порядке.Я имею в виду, что он должен соответствовать 9 строкам, даже если между ними есть нежелательные строки.

Обновление, вот как я его использую

 if re.match(result_expected[command],actual_result,re.M|re.I):
      if verbose == "True":
        print("Command output and expected output Matched")

 result_expected - is our regex I have given above.
 actual_result - is the 10 lines which is output of the command executed on the firewall. 

ок.Чтобы сделать его более понятным, мой шаблон работает для следующих 14 строк.

pattern='(ssh 192.(168.((254.(2|6|20|21|25|38|42)|255.78|255.91|255.92) 255.255.255.255|(240|248|236).0 255.255.252.0)|115.24.64 255.255.255.224) [^ ]*\r?\n?){14}'

ssh 192.168.240.0 255.255.252.0 junk_string
ssh 192.168.248.0 255.255.252.0 junk_string
ssh 192.168.236.0 255.255.252.0 junk_string
ssh 192.168.254.42 255.255.255.255 junk_string
ssh 192.168.254.25 255.255.255.255 junk_string
ssh 192.168.254.21 255.255.255.255 junk_string
ssh 192.168.255.78 255.255.255.255 junk_string
ssh 192.168.254.20 255.255.255.255 junk_string
ssh 192.168.254.38 255.255.255.255 junk_string
ssh 192.115.24.64 255.255.255.224 junk_string
ssh 192.168.254.2 255.255.255.255 junk_string
ssh 192.168.254.6 255.255.255.255 junk_string
ssh 192.168.255.91 255.255.255.255 junk_string
ssh 192.168.255.92 255.255.255.255 junk_string

Но когда мы добавляем еще одну строку

ssh 172.31.1.30 255.255.255.255 junk_string

, тогда регулярное выражение не выполняется для

ssh 192.168.240.0 255.255.252.0 junk_string
ssh 192.168.248.0 255.255.252.0 junk_string
ssh 192.168.236.0 255.255.252.0 junk_string
ssh 192.168.254.42 255.255.255.255 junk_string
ssh 192.168.254.25 255.255.255.255 junk_string
ssh 192.168.254.21 255.255.255.255 junk_string
ssh 192.168.255.78 255.255.255.255 junk_string
ssh 192.168.254.20 255.255.255.255 junk_string
ssh 192.168.254.38 255.255.255.255 junk_string
ssh 172.31.1.30 255.255.255.255 junk_string
ssh 192.115.24.64 255.255.255.224 junk_string
ssh 192.168.254.2 255.255.255.255 junk_string
ssh 192.168.254.6 255.255.255.255 junk_string
ssh 192.168.255.91 255.255.255.255 junk_string
ssh 192.168.255.92 255.255.255.255 junk_string

Мое требование - регулярное выражение должно работать, пока есть 14 строк.Даже если дополнительная строка идет до / после / между.

Как мы можем этого достичь?

1 Ответ

0 голосов
/ 11 мая 2018

Если вы хотите сопоставить точку буквально, вы должны экранировать ее \., иначе это будет означать совпадение с любым символом.Также отсутствует ведущий s, теперь он говорит: sh.

Если вы используете чередование и не хотите фиксировать значения, вы можете использовать группу без захвата (?:

Чтобы сопоставить все строки, кроме ssh 192.115.24.64 255.255.255.224 junk_string, вы можете использовать findall .

Без захвата групп вы можете сопоставить свои строки с:

ssh 192\.217\.(?:254\.(?:2[015]|38|42)|255\.78|24[08]\.0|236\.0) 255\.255\.(?:255\.255|252\.0) [^ ]*\r?\n|\r

Демо Python

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