Python 已知字符串之前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.

我正在使用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.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地址
  • 然后跳到MAC地址部分(包含
  • 跳到下一个打开的页面
  • 最后检查parens中的字符串是否为
    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
    来生成机器可读的输出,而不是依赖易于破坏的正则表达式。