2009-03-06 5 views
7

Ho voluto tagliare una stringa di indirizzi e-mail che possono essere separati da qualsiasi combinazione di virgole e spazi bianchi.Python regex dividere una stringa con uno dei due delimitatori

e ho pensato che sarebbe piuttosto straight-forward:

sep = re.compile('(\s*,*)+') 
print sep.split("""[email protected], [email protected] 

    [email protected],,[email protected]""") 

ma non lo è. Non riesco a trovare una regex che non lascerà alcuni slot vuoti come questo:

['[email protected]', '', '[email protected]', '', '[email protected]', '', '[email protected]'] 

Ho provato varie combinazioni, ma nessuno sembra funzionare. È questo, infatti, possibile, con regex?

+1

questo non dovrebbe essere un post della comunità wiki. – Triptych

+1

In realtà non dovrebbe essere un post wiki della comunità. Ma ancora, questo problema è ben risolto usando le espressioni regolari. Un uso di regex valido! +1 – batbrat

+0

penso perché ha risposto lui stesso – hasen

risposta

14

Doh!

È proprio questo.

sep = re.compile('[\s,]+') 
+0

In Perl (probabilmente in Python, a causa del fatto che sembra fare la stessa cosa) using() s in un'espressione regolare quando la divisione fa dividere() per preservare la corrispondenza (tra parentesi) e restituisce una lista con la corrispondenza del modello tra gli elementi desiderati. Quindi forse non usare() s in una divisione. –

2

Mi piace il seguente ...

>>> sep= re.compile(r',*\s*') 
>>> sep.split("""[email protected], [email protected] 

    [email protected],,[email protected]""") 
['[email protected]', '[email protected]', '[email protected]', '[email protected]'] 

Che sembra anche di lavorare su dati di test.

+0

+1: non so perché questo sia stato rifiutato prima, ma funziona abbastanza bene. – tgray

+0

L'espressione regolare corrisponderà alla stringa vuota, poiché utilizza quantificatori a stella per tutto. Davvero vuoi dividere almeno un personaggio; la soluzione dell'OP con una classe di caratteri e più quantificatori è migliore, per non dire molto più chiara da leggere. – kquinn

+0

Vedo. Non penso che le espressioni regolari possano essere classificate in base alla leggibilità, ma capisco il tuo punto sull'abbinamento di almeno un personaggio. – tgray