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):“之后的新行。
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)请帮帮忙。谢谢。
发布于 2013-12-08 17:57:38
您不需要为此使用正则表达式。您的输入看起来像配置文件或程序的输出,并且易于解析。
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发布于 2013-12-08 14:24:14
您需要使用re.search而不是re.match,从字符串的一开始就使用re.match进行匹配:
>>> 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'
re.match()只在字符串的开头检查匹配,而re.search()只检查字符串中任何位置的匹配。
https://stackoverflow.com/questions/20454423
复制相似问题