python正则表达式与dig输出不匹配

时间:2013-12-11 10:47:06

标签: python regex dns dig

我正在尝试解析一些挖掘输出(是的,我知道dnspython但它不满足我的要求)并且有一个问题是为我的用例找到匹配的正则表达式。 我正在尝试使用IN和NS在dig输出中找到所有行,示例输出如下所示:

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

我试过了:

if 'NS' in line:

我发现了一些相关的行,遗憾的是我对NSEC DNS条目有一些误报,例如:

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 个答案:

答案 0 :(得分:2)

您需要search,而不是match

match command only matches from the beginning of the string

此外,如果INNS之间的空格数量非常灵活,您可以使用+量化一个或多个匹配项。

如果将正则表达式的编译移出循环并只编译一次,您的代码会更快:

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

答案 1 :(得分:2)

你需要写\ s *

\ s只匹配空格中的一个字符,并且您有多个空格或者可能需要匹配的选项卡