条件python正则表达式

时间:2018-03-06 13:11:52

标签: python regex

我正在尝试使用以下正则表达式解析nmap输出以进行服务发现。

regex = "(?P<ports>[\d]+)\/(?P<protocol>tcp|udp)\s+(?P<state>open|filtered|closed)\s+(?P<service>[\w\S]*)\s+(?P<reason>\S*\s+\S+\s+\S*(?=\w)\w)(?:\n|(?P<version>.*))"

它可以使用以下模式解析输出。

PORT    STATE    SERVICE    REASON         VERSION
80/tcp   open     http     str1 str2 str3    version string here

但是无法正确解析以下输出。

PORT    STATE    SERVICE    REASON         VERSION
161/tcp filtered snmp       no-response

是否有任何单一的正则表达式可以解析上述两种模式?

1 个答案:

答案 0 :(得分:0)

您可以为硬编码no-response添加替代方案,它会有帮助吗?

(?P<ports>[\d]+)\/(?P<protocol>tcp|udp)\s+(?P<state>open|filtered|closed)\s+(?P<service>[\w\S]*)\s+(?P<reason>(:?\S*\s+\S+\s+\S*(?=\w)\w)|(:?no-response))(?:\n|(?P<version>.*))

Demo

相关问题