2

我正在尝试使用正则表达式(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_.*}}')

但没有结果。

我是一个正则表达式的菜鸟,所以任何帮助都将不胜感激。

4

2 回答 2

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']

需要问号才能使匹配成为non-greedy,这意味着它将在第一个停止}而不是匹配所有内容直到最后一个。

于 2012-11-20T23:20:53.740 回答
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')]
于 2012-11-20T23:22:15.783 回答