Exscript any_match()函数使用正则表达式来匹配字符串中的模式,并在元组中返回结果。
我正在尝试匹配traceroute输出中的IP地址。它在很大程度上起作用,但由于某种原因返回一些额外的值(除了目标地址)。我想在正确的正则表达式中使用一些帮助,只返回没有额外值的IP地址。 **注意:**我已经google搜索stackoverflow for regex模式以及研究正则表达式帮助页面。这是迄今为止最接近的正则表达式。
def ios_commands(job, host, conn):
conn.execute('terminal length 0')
conn.execute('tr {}'.format(DesAddr))
print('The results of the traceroute', repr(conn.response))
for hops in any_match(conn,r'(([0-9]{1,3}\.){3}[0-9]{1,3})'):
hop_addresses = list(hops)
输出
hostname>('The results of the traceroute', "'tr 192.33.12.4\\r\\nType escape sequence to abort.\\r\\nTracing the route to hostname (192.33.12.4)\\r\\nVRF info: (vrf in name/id, vrf out name/id)\\r\\n 1 hostname (192.32.0.174) 0 msec 0 msec 0 msec\\r\\n 2 hostname (192.32.0.190) 0 msec 0 msec 0 msec\\r\\n 3 192.33.226.225 [MPLS: Label 55 Exp 0] 0 msec 4 msec 0 msec\\r\\n 4 192.33.226.237 0 msec 0 msec 0 msec\\r\\n 5 hostname (192.33.12.4) 4 msec * 0 msec\\r\\nhostname>'")
['192.33.12.4', '12.'] #note the extra '12.' value
['192.33.12.4', '12.']
['192.32.0.174', '0.']
['192.32.0.190', '0.']
['192.33.226.225', '226.']
['192.33.226.237', '226.']
['192.33.12.4', '12.']
答案 0 :(得分:3)
您的模式中有2个匹配的组。第一个(和外部的)是整个IP地址;第二组重复三次:
([0-9]{1,3}\.){3}
使用非捕获组:
((?:[0-9]{1,3}\.){3}[0-9]{1,3})