2010-11-24 19 views
0

So finden Sie alles, was nach Symols #TR= geht und es ist innerhalb [ ] mit Re-Modul. Zum Beispiel #TR=[ dfgg dfgddfg dgfgf dgdgdg dfgfg ]Python. Regulärer Ausdruck

+0

Erwarten Sie verschachtelte '[]' in Ihrer obersten Ebene von '[]'? – martineno

Antwort

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

Wenn Sie nur das erste Vorkommen dieses Musters suchen möchten, Verwendung:

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

Wenn Sie alle Vorkommen im Text, Verwendung finden wollen:

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

Denken Sie daran zu prüfen, ob die gesuchten Zeichen in regulären Ausdrücken special meaning haben (wie [ oder ]). Wenn sie speziell sind, entziehe sie mit dem Backslash: \[.

Denken Sie auch daran, dass reguläre Ausdrücke standardmäßig "gierig" sind, was bedeutet, dass sie versuchen, so viel Text wie möglich zu erhalten. also, wenn Sie verwenden .* (was bedeutet „außer Newline jedes Zeichen“; details) statt [^\]]* (was bedeutet „Spiel bis zum ] gefunden wird, und stoppen, bevor es“), zu viel Text angepasst werden könnte:

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

Sie können auch die "genügsam" Modifikator ? in Ihrem Muster, nach der Qualifikation (*, +) verwendet werden, die die "die weniger-Zeichen-the-besser" passende ermöglicht (*?, +? verwenden). Das Ergebnis könnte besser lesbar:

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

statt:

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

Es gibt ein großes Online-Tool, um Ihre Muster as-you-type zu testen: 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

Entschuldigung, ich habe deine Antwort versehentlich bearbeitet, um meine eigene zu bearbeiten. Habe meine Änderung rückgängig gemacht. –