gpt4 book ai didi

python - 我该如何修复这个正则表达式? (nmap 结果)

转载 作者:太空宇宙 更新时间:2023-11-03 15:01:55 26 4
gpt4 key购买 nike

我尝试将文本解析为 4 个捕获组,但遇到了问题。

我的正则表达式是:

(\d{1,5})\/(tcp|udp)\s+open\s+(\S+)\s*(.*)?

一些示例输入是:

Nmap scan report for X
Host is up (0.097s latency).
Not shown: 192 closed ports
PORT STATE SERVICE VERSION
135/udp open msrpc
137/udp open netbios-ns Microsoft Windows XP netbios-ssn (workgroup: THINC)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Windows XP microsoft-ds

这几乎可以完美地工作。问题出在 135/udp 的线路上,没有版本字段,因此该线路的捕获组 4 会环绕并抓取整个下一行(从 137/udp 开始)。

我希望捕获组 4 对于 135/udp 行(或版本字段为空的任何地方)为空/为 null。

看起来我的最后一个 .* 不应该超过行终止符,但事实确实如此。我还在最后一个捕获组之后包含了 ? ,以尝试使其可选,例如允许 null 值。

谁能指出我做错了什么?与仅仅为我提供一个有效的正则表达式相比,解释我的错误会更有帮助。

Visual representation

最佳答案

\s 似乎是匹配的换行符。这对我来说是出乎意料的 - 我本来希望 \s 仅匹配空格。

尝试仅匹配制表符和空格:[\t] 而不是 \s

并且要求更高一些 - 意味着设置 + 所需的空格和非空格,而不是 *:

(\d{1,5})\/(tcp|udp)[\t]+open[\t]+(\S+)[\t]+(.*)

(\S+) 是 open 和空格之后预期的一个条目。但由于我们只对之后继续的那些行感兴趣:[\t]+ 要求该条目之后有空格(不包括以该处结尾的行) - 使用 (.*) 捕获空格之后的所有内容。

关于python - 我该如何修复这个正则表达式? (nmap 结果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45002313/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com