2012-11-20 37 views
2

我想从Python 2.7中使用正则表达式(重新模块)的字符串中提取一部分。试图提取使用正则表达式的字符串 - Python

我能得到的最好的是

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_.*}}')

但没有结果。

我有点正义表达式的noob,所以任何帮助将不胜感激。

回答

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

需要的问号,使比赛非贪婪,这意味着它会在停止第一个}而不是匹配一切,直到最后一个。

+0

冠军。我需要它包含“PakBusPort_”部分,但将其更改为 'p = re.compile(r'{(PakBusPort _。*?)}')' 给了我后来的结果。 – user1840358

+1

欢迎使用堆栈溢出,并且不要忘记将好的解决方案标记为“已接受的答案”。它可以帮助访问者并奖励回答者。 – BoppreH

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