尝试使用正则表达式提取字符串 - Python

时间:2012-11-20 23:17:33

标签: python regex

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

但没有结果。

我是一个正常表达的菜鸟,所以任何帮助都会受到赞赏。

2 个答案:

答案 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')]