我正在尝试使用正则表达式(re模块)从python 2.7中的字符串中提取一部分。
我能得到的最好的是
res = "{{PakBusPort_somename} 11942 pakbus-port 1}\r\n{{Somename} 5436 CR800-series 2}"
p = re.compile('PakBusPort_')
m = p.findall( res )
哪个会给我“PakBusPort_”。但我也需要它给我“somename”部分。
基本上我需要以“PakBusPort_”开头的{和}之间的所有内容。我试过了
p = re.compile('PakBusPort_.*}}')
但没有结果。
我是一个正常表达的菜鸟,所以任何帮助都会受到赞赏。
答案 0 :(得分:4)
In [71]: p = re.compile(r'{PakBusPort_(.*?)}')
In [72]: p.findall(res)
Out[72]: ['somename']
如果您还需要包含PakBusPort_
,请移动左括号:
In [73]: p = re.compile(r'{(PakBusPort_.*?)}')
In [74]: p.findall(res)
Out[74]: ['PakBusPort_somename']
需要问号才能使匹配非贪婪,这意味着它将在第一个}
停止,而不是将所有内容匹配到最后一个。
答案 1 :(得分:0)
你很接近,这应该会给你一个与你的正则表达式匹配的元组列表:
res = '{{PakBusPort_somename} 11942 pakbus-port 1}\r\n{{Somename} 5436 CR800-series 2}'
p = re.compile('{(PakBusPort)_([^}]*)}')
m = p.findall( res )
print m
[('PakBusPort', 'somename')]