2015-09-28 6 views
7

Ich möchte alle Daten in [[ ]] diese Klammern enthalten finden.Python Regex Teilauszug

[[aaaaa]] -> aaaaa

Mein Python-Code (mit Re-Bibliothek) war

la = re.findall(r'\[\[(.*?)\]\]', fa.read()) 

Was passiert, wenn ich will nur extrahieren 'a' von [[a|b]]

Jeder prägnante Ausdruck für diese Aufgabe? (Auszug Daten vor |)

Oder sollte ich zusätzliche if-Anweisung verwenden?

Antwort

3

können Sie versuchen:

r'\[\[([^\]|]*)(?=.*\]\])' 

([^\]|]*) übereinstimmen, bis ein | oder ] gefunden wird. Und (?=.*\]\]) ist ein Lookahead, um sicherzustellen, dass ]] auf Übereinstimmung RHS abgestimmt ist.

Testing:

>>> re.search(r'\[\[([^\]|]*)(?=.*\]\])', '[[aaa|bbb]]').group(1) 
'aaa' 
>>> re.search(r'\[\[([^\]|]*)(?=.*\]\])', '[[aaabbb]]').group(1) 
'aaabbb' 
+1

Vielen Dank für die Bereitstellung präzise Antwort und Erklärung. Ich sollte mehr Artikel über reguläre Ausdrücke lesen. – SUNDONG

+0

Nur eine Sache zu beachten - dies wird nicht mit geschachtelten Klammern umgehen (und in der Tat würde eine Regex überhaupt nicht ohne die Hilfe eines Counters). – brandonscript