Python Regex在3个在线测试人员上成功测试,但没有在代码中工作

时间:2017-05-15 15:33:52

标签: python regex python-3.x

您好我正在尝试从头开始提取IP,并在下面的多行字符串末尾编号。我已经在pythex.org,pyregex.com和regex101.com上成功测试了它,但是在脚本执行时它不起作用。正则表达式语句的输出如下。

多行字符串(使用paramiko从SSH路由器提取到SSH):

sh ip bgp summ | in 192.168.190.
192.168.190.3   4          100     166     169       17    0    0 02:27:11            3
192.168.190.4   4          100     169     171       17    0    0 02:26:33            4
R1#

我的正则表达式如下(我也尝试以常规方式使用正则表达式标志,即re.M):

re3=re.findall(r"(?im)^(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b)\s+\b4\b.+\s+(\b\d{1,4}\b)$", string1)

当我运行以下代码时:

print(type(string1))
print(type(re3))
print(len(re3))
print(re3)

输出如下:

<class 'str'>
<class 'list'>
0
[]

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

该字符串包含回车符(\r,CR)。

# without CR
>>> re.search('(?m)a$', 'a\n')  # matches
<_sre.SRE_Match object; span=(0, 1), match='a'>

# with CR
>>> re.search('(?m)a$', 'a\r\n')  # does not match
>>> re.search('(?m)a\r$', 'a\r\n')
<_sre.SRE_Match object; span=(0, 2), match='a\r'>

调整正则表达式以匹配CR;在\r?之前添加$(使用\r?使CR成为可选项)

re3 = re.findall(r"(?im)^(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b)\s+\b4\b.+\s+(\b\d{1,4}\b)\r?$", string1)
#                                                                                          ^^^