2013-12-11 4 views
0

Я пытаюсь разобрать некоторый вывод dig (да, я знаю о dnspython, но это не удовлетворяет моим требованиям) и возникли проблемы с поиском соответствующего регулярного выражения для моей usecase. Я пытаюсь найти все строки из вывода роют IN и NS в них, и пример вывода выглядит следующим образом:python regex не соответствует dig output

stackexchange.com. 300 IN NS ns1.serverfault.com. 
stackexchange.com. 300 IN NS ns2.serverfault.com. 

я попробовал:

if 'NS' in line: 

, и я нашел несколько соответствующих строк , к сожалению, у меня есть некоторые ложные срабатывания для записей DNS NSEC, например:

CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q5NFFJS5FUB0F2DNA098SBN0O663V NS SOA RRSIG DNSKEY NSEC3PARAM 

также отображается на моем выходе. Я знаю об ошибке \s, который должен соответствовать любому пробелу и вкладке, как бы мое регулярное выражение не срабатывало. В настоящее время у меня есть

for line in output: 
    regex = re.compile(r'IN\sNS\s') 
    if regex.match(line): 
     print(line) 

Но он не работает. вы можете помочь мне придумать регулярное выражение, которое не создает ложных срабатываний? Приветствуется всякая помощь. Заранее спасибо

ответ

2

Вы хотите search, а не match.

match command only matches from the beginning of the string.

Кроме того, если количество пробелов между IN и NS является гибким, вы можете количественно определить одно или несколько совпадений с помощью +.

Ваш код будет работать быстрее, если вы перемещаете компиляцию регулярных выражений из цикла и только скомпилировать один раз:

regex = re.compile(r'IN\s+NS\s') 
for line in output: 
    if regex.search(line): 
     print(line) 
+0

Спасибо! Это сработало отлично. Я отмечу это как ответ в 10mins, так как SO не позволяет мне отмечать его, как еще ответили. – Momo

2

Вам нужно написать \ S *

\ S соответствует только один символ пробелов, и у вас есть несколько пробелов или, возможно, вкладка, которая нуждается в сопоставлении

Смежные вопросы