您好我正在尝试从头开始提取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
[]
我错过了什么吗?
答案 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)
# ^^^