2009-03-06 11 views
7

Chciałem wyciąć ciąg adresów e-mail, które mogą być oddzielone dowolną kombinacją przecinków i spacji.Python regex podzielił ciąg znaków przez jeden z dwóch ograniczników

I pomyślałem, że byłoby całkiem prosta:

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

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

Ale tak nie jest. Nie mogę znaleźć regex, które nie pozostawi kilka pustych szczelin tak:

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

Próbowałem różnych kombinacji, ale nie wydają się działać. Czy to możliwe, z regex?

+1

to nie powinno być po społeczność wiki. – Triptych

+1

To naprawdę nie powinien być post wiki społeczności. Ale nadal ten problem jest ładnie rozwiązywany za pomocą wyrażeń regularnych. Prawidłowe użycie wyrażenia regularnego! +1 – batbrat

+0

Myślę, że ponieważ odpowiedział na to sam – hasen

Odpowiedz

14

Doh!

Po prostu to.

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

W Perlu (prawdopodobnie w Pythonie, ze względu na fakt, że wydaje się, że robi to samo) użycie() w regex podczas dzielenia powoduje, że split() zachowuje dopasowanie (między parens) i zwraca listę z dopasowaniem wzorca pomiędzy żądanymi przedmiotami. Więc może nie używać() s w podziale. –

2

Lubię następujących ...

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

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

co wydaje się również do pracy na danych testowych.

+0

+1: Nie wiem, dlaczego to było wcześniej odrzucone, ale działa całkiem nieźle. – tgray

+0

To wyrażenie dopasuje pusty ciąg, ponieważ używa kwantyfikatorów gwiazd do wszystkiego. Naprawdę chcesz podzielić na co najmniej jedną postać; rozwiązanie OP z klasą znaków i kwantyfikatorem jest lepsze, nie wspominając już o tym, że jest czytelniejsze. – kquinn

+0

Rozumiem. Nie sądzę, że wyrażenia regularne mogą być uszeregowane pod względem czytelności, ale rozumiem co najmniej jedna postać. – tgray

Powiązane problemy