2010-11-24 107 views
0

如何查找symols #TR=後面的所有內容,並使用re模塊在[ ]的內部。例如#TR=[ dfgg dfgddfg dgfgf dgdgdg dfgfg ]Python。正則表達式

+0

您是否期待在頂層`[]`內嵌套`[]`? – martineno 2010-11-24 22:30:39

回答

5
import re 
txt = '#TR=[ dfgg ] a kuku #TR=[ala ma kota]' 

如果你要搜索只是這種模式的第一次出現,使用方法:

matches = re.search('#TR=\[([^\]]*)\]', txt) 
if matches: 
    print(repr(matches.group(1))) 
' dfgg dfg ' 

如果你想查找的文字,使用的所有事件:

matches = re.findall('#TR=\[([^\]]*)\]', txt) 
if matches: 
    print(matches) 
[' dfgg ', 'ala ma kota'] 

請記住檢查您正在搜索的字符是否在正則表達式中有special meaning(如[])。如果它們是特殊的,請用反斜槓將它們轉義出來:\[

另外請記住,默認情況下,正則表達式是「貪婪」,這意味着他們嘗試獲得儘可能多的文本以匹配模式;所以,如果你使用.*(意思是「匹配任何字符除了換行符」 details)而不是[^\]]*(意思是「比賽直到]被發現,和之前停止」),太多的文字可以匹配:

matches = re.findall('#TR=\[(.*)\]', txt) 
if matches: 
    print(matches) 
[' dfgg ] a kuku #TR=[ala ma kota'] 

您也可以使用「非貪婪」修改?在你的模式,這使的「少字符 - 越好的」匹配(使用*?+?)限定符(*+)之後。其結果可能是更具可讀性:代替

'#TR=\[(.*?)\]' 

'#TR=\[([^\]]*)\]' 

有一個偉大的在線工具測試圖案作爲你型:RegExr by Grant Skinner

0

(?< =#TR = [)[^] *(?=])

1
import re 
# compile the regex 
exp = re.compile('.*\[(.*)\].*') 
txt = r"#TR=[ dfgg dfgddfg dgfgf dgdgdg dfgfg ]" 
match = exp.match(txt) 
# grab the text between the square brackets 
result = match.group(1) 
+0

對不起,我錯誤地編輯了你的答案,意在編輯我自己的答案。恢復了我的改變。 – 2010-11-24 22:32:49