首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想在python中使用正则表达式匹配换行符后面的字符串。

我想在python中使用正则表达式匹配换行符后面的字符串。
EN

Stack Overflow用户
提问于 2013-12-08 14:18:49
回答 2查看 103关注 0票数 1
代码语言:javascript
复制
Device ID: xyz
Entry address(es): 
 IP address: 10.3.10.46
Platform: WS-x,  Capabilities: Switch IGMP 
Interface: GigabitEthernet9/33,  Port ID (outgoing port): GigabitEthernet0/2
Holdtime : 177 sec
Management address(es): 
 IP address: 10.3.10.46

上面是上面file.From中的一个片段,我想通过只匹配下面两行来收集ip地址。输入地址: IP地址: 10.3.10.46或管理地址: IP地址: 10.3.10.46

我编写的正则表达式如下所示,它不起作用,我无法解决如何在正则表达式中显示"address(es):“之后的新行

代码语言:javascript
复制
f = open(fileName)
for line in f:
    matchObj1 = re.match(r'Entry address\(es\):\s+IP address: ([0-9.]+)', line)
    if matchObj1:
    print "IP Address = ", matchObj1.group(1)

    matchObj2 = re.match(r'Entry address\(es\):\s+IP address: ([0-9.]+)', line)
    if matchObj2:
    print "IP Address = ", matchObj2.group(1)

请帮帮忙。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-08 17:57:38

您不需要为此使用正则表达式。您的输入看起来像配置文件或程序的输出,并且易于解析。

代码语言:javascript
复制
def get_addresses(fname):
    addresses = {}
    with open(fname) as f:
        lines = [l.strip().lower() for l in f]

    for i, line in enumerate(lines):
        if line.startswith("ip address"):
            ip = line.split(": ")[1]
            address_type = lines[i-1]
            if address_type == "entry address(es):":
                addresses["entry"] = ip
            elif address_type == "management address(es):":
                addresses["management"] = ip
            # Add additional address type handling here

    return addresses
票数 0
EN

Stack Overflow用户

发布于 2013-12-08 14:24:14

您需要使用re.search而不是re.match,从字符串的一开始就使用re.match进行匹配:

代码语言:javascript
复制
>>> s = 'Device ID: xyz\nEntry address(es): \n      IP address: 10.3.10.46\n    Platform: WS-x,  Capabilities: Switch IGMP \n    Interface: GigabitEthernet9/33,  Port ID (outgoing port): GigabitEthernet0/2\n    Holdtime : 177 sec'
>>> re.search(r'Entry address\(es\):\s+IP address: ([0-9.]+)', s).group(1)
'10.3.10.46'

match()

re.match()只在字符串的开头检查匹配,而re.search()只检查字符串中任何位置的匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20454423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档