2015-09-28 23 views
7

Desidero trovare tutti i dati inclusi in [[ ]] tra parentesi.Estratto parziale regex Python

[[AAAAA]] -> aaaaa

Il mio codice Python (usando ri biblioteca) era

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

cosa se voglio estrarre solo 'a' da [[a|b]]

Qualsiasi espressione regolare concisa per questa attività? (estrarre i dati prima di |)

Oppure dovrei utilizzare un'istruzione if aggiuntiva?

risposta

3

Si può provare:

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

([^\]|]*) corrisponderà fino a quando un | o ] viene trovato. E (?=.*\]\]) è un lookahead per garantire che ]] corrisponda a RHS della corrispondenza.

Testing:

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

Grazie per fornire risposta concisa e spiegazione. Dovrei leggere più articoli sull'espressione regolare. – SUNDONG

+0

Solo una cosa da notare - questo non gestirà parentesi annidate (e in effetti una regex non sarebbe in generale comunque senza l'aiuto di un contatore). – brandonscript