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



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

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转义,它应该匹配任何类型的空白和制表符,无论我的regex如何失败。我目前有

for line in output:
    regex = re.compile(r'INsNSs')
    if regex.match(line):
        print(line)

但它不起作用。你能帮我想出一个不会产生误报的正则表达式吗?任何形式的帮助都将不胜感激。提前感谢

您想要的是search,而不是match

match命令只从字符串的开头开始匹配。

此外,如果INNS之间的空白量是灵活的,则可以使用+量化一个或多个匹配。

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

regex = re.compile(r'INs+NSs')
for line in output:
    if regex.search(line):
        print(line)

您需要编写\s*

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

相关内容

  • 没有找到相关文章

最新更新