2016-07-02 69 views
6

ho un'espressione regolare che cerca una stringa che contiene '.00.' o '.11.' come segue:sostituire tutte le occorrenze che corrispondono alla espressione regolare

.*\.(00|11)\..* 

Quello che vorrei fare è sostituire tutte le occorrenze che corrispondono al modello con 'X00X' o 'X11X'. Ad esempio, la stringa '.00..0..11.' risulterebbe in 'X00X.0.X11X'.

Stavo cercando nel metodo re.sub Python e sono incerto su come farlo in modo efficace. L'oggetto match restituito corrisponde solo alla prima occorrenza e quindi non funziona bene. Qualche consiglio? Dovrei semplicemente usare una stringa di sostituzione per questa attività? Grazie.

risposta

8

re.sub() sostituisce tutte le corrispondenze individuate, ma l'utilizzo di .* potrebbe aver causato un'eccessiva corrispondenza della regex (anche altre occorrenze di .00. ecc.). Semplicemente fare:

In [2]: re.sub(r"\.(00|11)\.", r"X\1X", ".00..0..11.") 
Out[2]: 'X00X.0.X11X' 

Nota che i modelli non possono sovrapporsi:

In [3]: re.sub(r"\.(00|11)\.", r"X\1X", ".00.11.") 
Out[3]: 'X00X11.' 
+0

Vuol re.sub di ricerca uso e non corrispondono? Stavo usando. * Dal momento che ho pensato che usasse la partita. –

+0

In Python, 'match' cerca una corrispondenza all'inizio di una stringa, non richiede una corrispondenza stringa completa. 're.sub' trova tutte le sequenze non sovrapposte che corrispondono al modello e le sostituisce. –

Problemi correlati