2009-03-06 32 views
7

Quería cortar una cadena de direcciones de correo electrónico que pueden estar separadas por cualquier combinación de comas y espacio en blanco.Python regex dividir una cadena por uno de dos delimitadores

y pensé que sería bastante recta hacia adelante:

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

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

pero no lo es. No puedo encontrar una expresión regular que no dejará algunos espacios vacíos como este:

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

He intentado varias combinaciones, pero ninguno parece funcionar. ¿Es esto, de hecho, posible, con expresiones regulares?

+1

esto no debería ser un post wiki de la comunidad. – Triptych

+1

Realmente no debería ser una publicación wiki de la comunidad. Pero aún así, este problema está bien resuelto utilizando expresiones regulares. ¡Un uso de expresiones regulares válido! +1 – batbrat

+0

Creo que porque él mismo lo contestó – hasen

Respuesta

14

Doh!

Es solo esto.

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

En Perl (probablemente en Python, debido a que parece estar haciendo lo mismo) usando() s en una expresión regular cuando se divide causa que la división() preserve la coincidencia (entre los parens), y devuelva una lista con la coincidencia de patrón entre los elementos que desea. Entonces quizás no use() s en una división. –

2

me gusta lo siguiente ...

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

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

Lo que también parece funcionar en los datos de prueba.

+0

+1: No sé por qué no se votó antes, pero funciona muy bien. – tgray

+0

Esa expresión regular coincidirá con la cadena vacía, ya que utiliza cuantificadores en estrella para todo. Realmente quieres dividir al menos un personaje; la solución de OP con una clase de caracteres y un cuantificador plus es mejor, sin mencionar que es mucho más clara de leer. – kquinn

+0

Ya veo. No creo que las expresiones regulares puedan clasificarse según la legibilidad, pero entiendo tu punto sobre la coincidencia de al menos un personaje. – tgray

Cuestiones relacionadas