2011-02-14 8 views
20

Estoy tratando de dividir una cadena con una expresión regular.Cadena de división de Python en la expresión regular

Friday 1Friday 11 JAN 11 

La salida que quiero lograr es

['Friday 1', 'Friday 11', ' JAN 11'] 

Mi fragmento hasta el momento no está produciendo los resultados deseados:

>>> import re 
>>> p = re.compile(r'(Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)\s*\d{1,2}') 
>>> filter(None, p.split('Friday 1Friday 11 JAN 11')) 
['Friday', 'Friday', ' JAN 11'] 

¿qué estoy haciendo mal con mi expresión regular?

Respuesta

23

El problema es la captura de paréntesis. Esta sintaxis: (?:...) los hace no capturables. Pruebe:

p = re.compile(r'((?:Friday|Saturday)\s*\d{1,2})') 
+0

¡Eso es exactamente lo que estaba buscando! Sabía que era algo pequeño. Gracias –

+0

Me estaba acercando con p = re.compile (r '((viernes | sábado) \ s * \ d {1,2})') pero no entendía por qué estaba obteniendo 2 resultados para cada grupo. Ahora tiene sentido completo, estaba produciendo el resultado + la referencia de referencia del nombre del grupo. –

0
p = re.compile(r'(Friday\s\d+|Saturday)') 
5

También puede usar la función 're.findall'.

\>>> val 
'Friday 1Friday 11 JAN 11 ' 
\>>> pat = re.compile(r'(\w+\s*\d*)') 
\>>> m=re.findall(pat,val) 
\>>> m 
['Friday 1', 'Friday 11', 'JAN 11'] 
Cuestiones relacionadas