2012-12-22 15 views
36

Esiste un modo per sostituire direttamente tutti i gruppi nella sintassi regex.Python Regex sostituisce istantaneamente i gruppi

Il modo normale:

re.match(r"(?:aaa)(_bbb)", string1).group(1) 

Eppure voglio ottenere qualcosa di simile:

re.match(r"(\d.*?)\s(\d.*?)", "(CALL_GROUP_1) (CALL_GROUP_2)") 

quindi voglio solo per costruire la nuova stringa istantanea, se possibile, chiamando i gruppi l'espressione regolare appena catturato.

risposta

76

Dai un'occhiata alla re.sub: funzione

result = re.sub(r"(\d.*?)\s(\d.*?)", r"\1 \2", string1) 

Questa è la sostituzione regex di Python (sostituire). La stringa di sostituzione può essere riempita con le cosiddette backreferences (backslash, numero di gruppo) che vengono sostituite con quelle corrispondenti ai gruppi. I gruppi vengono conteggiati come con la funzione group(...), ovvero a partire da 1, da sinistra a destra, aprendo le parentesi.