Python 已知字符串之前IP地址上的正则表达式匹配
我正在使用nmap搜索本地(家庭)网络上的主机名和相关IP。我可以拉一根看起来像这样的绳子:Python 已知字符串之前IP地址上的正则表达式匹配,python,regex,nmap,Python,Regex,Nmap,我正在使用nmap搜索本地(家庭)网络上的主机名和相关IP。我可以拉一根看起来像这样的绳子: Starting Nmap 6.40 ( http://nmap.org ) at 2014-02-15 22:20 PST Nmap scan report for 192.168.1.1 Host is up (0.00025s latency). MAC Address: ZZ:ZZ:11:ZZ:ZZ:ZZ (Cisco-Linksys) Nmap scan report for 192.168.
Starting Nmap 6.40 ( http://nmap.org ) at 2014-02-15 22:20 PST
Nmap scan report for 192.168.1.1
Host is up (0.00025s latency).
MAC Address: ZZ:ZZ:11:ZZ:ZZ:ZZ (Cisco-Linksys)
Nmap scan report for 192.168.1.2
Host is up (0.0084s latency).
MAC Address: ZZ:ZZ:A1:2E:ZZ:ZZ (Apple)
Nmap scan report for 192.168.1.9
Host is up (0.012s latency).
MAC Address: A4:ZZ:57:17:ZZ:ZZ (Seiko Epson)
Nmap scan report for 192.168.1.103
Host is up (0.036s latency).
MAC Address: ZZ:ZZ:6D:05:ZZ:ZZ (Apple)
我知道我可以组合一个正则表达式,在“Seiko Epson”行的正上方为我提供IP地址,但我不知道怎么做
我特别想寻找一种方法来查找我正在搜索的主机的IP地址,我目前正在使用:
(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
查找IP地址,但我不知道如何扩充它以查找给定字符串上方的IP地址。如果将整个输入作为单个字符串,则
Nmap扫描报告
0-9
或
(应该在那里)作为输出IP地址:
)Seiko Epson
>>> inp='''Starting Nmap 6.40 ( http://nmap.org ) at 2014-02-15 22:20 PST
... Nmap scan report for 192.168.1.1
... Host is up (0.00025s latency).
... MAC Address: ZZ:ZZ:11:ZZ:ZZ:ZZ (Cisco-Linksys)
... Nmap scan report for 192.168.1.2
... Host is up (0.0084s latency).
... MAC Address: ZZ:ZZ:A1:2E:ZZ:ZZ (Apple)
... Nmap scan report for 192.168.1.9
... Host is up (0.012s latency).
... MAC Address: A4:ZZ:57:17:ZZ:ZZ (Seiko Epson)
... Nmap scan report for 192.168.1.103
... Host is up (0.036s latency).
... MAC Address: ZZ:ZZ:6D:05:ZZ:ZZ (Apple)'''
>>> import re
>>> r1 = re.compile(r'Nmap scan report for ([0-9.]*)[^:]*[^(]*\(Seiko Epson\)')
>>> r1.search(inp).group(1)
'192.168.1.9'
[^
..]
背后的思想是有限状态机。请输入您想要匹配的内容。一些测试用例?对于一个测试用例,我想在调用“Seiko Epson”的行的正上方匹配IP地址。在正则表达式中如何处理这个问题?如何获取输入字符串启动Nmap。。。(苹果)
?如果您可以将其压缩成一个长字符串,那么任务将非常简单。您可以使用nmap
来生成机器可读的输出,而不是依赖易于破坏的正则表达式。