2012-11-20 74 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')]