2009-03-06 15 views
7

Ich wollte eine Zeichenfolge von E-Mail-Adressen, die durch eine beliebige Kombination von Kommas und Leerzeichen getrennt sein können.Python Regex Split eine Zeichenfolge von einem der zwei Trennzeichen

Und ich dachte, dass es ziemlich geradlinig sein würde:

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

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

Aber es ist nicht. Ich kann nicht einen regulären Ausdruck finden, die einige leere Slots wie diese nicht verlassen:

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

ich verschiedene Kombinationen ausprobiert habe, aber keiner scheint zu funktionieren. Ist das tatsächlich möglich, mit Regex?

+1

wieder. – Triptych

+1

Es sollte wirklich kein Community-Wiki-Beitrag sein. Aber immer noch, dieses Problem ist gut gelöst mit Regexes. Eine gültige Regex-Verwendung! +1 – batbrat

+0

ich denke, weil er es selbst beantwortet – hasen

Antwort

14

Doh!

Es ist nur das.

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

In Perl (wahrscheinlich in Python, aufgrund der Tatsache, dass es scheint, das gleiche zu tun) mit() s in einer Regex beim Teilen verursacht die split(), um die Übereinstimmung zu erhalten (zwischen den Parens), und geben Sie eine Liste mit der Musterübereinstimmung zwischen den gewünschten Elementen zurück. Also vielleicht nicht() s in einem Split. –

2

Ich mag die folgende ...

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

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

Welche scheint auch auf dem Testdaten zu arbeiten. Dies sollte nicht ein Community Wiki post

+0

+1: Ich weiß nicht, warum das vorher abgestimmt wurde, aber es funktioniert ganz gut. – tgray

+0

Diese Regex wird der leeren Zeichenfolge entsprechen, da sie für alle Sternquantoren verwendet. Wirklich, du willst mindestens ein Zeichen teilen; Die OP-Lösung mit einer Zeichenklasse und einem Plus-Quantifizierer ist besser, ganz zu schweigen von viel klarer zu lesen. – kquinn

+0

Ich verstehe. Ich glaube nicht, dass reguläre Ausdrücke nach Lesbarkeit geordnet werden können, aber ich verstehe, dass Sie mindestens ein Zeichen gefunden haben. – tgray

Verwandte Themen