2011-01-04 17 views
6

Supongamos que tengo alguna cadena: "Lorem ipsum dolor sit amet" Necesito una lista de todas las palabras con una longitud mayor a 3. ¿Puedo hacerlo con expresiones regulares?Lista de todas las palabras que coinciden con la expresión regular

p. Ej.

pattern = re.compile(r'some pattern') 
result = pattern.search('Lorem ipsum dolor sit amet').groups() 

resultado contiene 'Lorem', 'ipsum', 'dolor' y 'amet'.

Editado:

Las palabras me refiero solo puede contener letras y números.

+0

¿Quieres decir letras ASCII, o son cartas internacionales como caracteres acentuados, etc también es relevante? –

Respuesta

14
>>> import re 
>>> myre = re.compile(r"\w{4,}") 
>>> myre.findall('Lorem, ipsum! dolor sit? amet...') 
['Lorem', 'ipsum', 'dolor', 'amet'] 

tomar nota de que en Python 3, en donde todas las cadenas están Unicode, esto también encontrará palabras que usan letras que no son ASCII:

>>> import re 
>>> myre = re.compile(r"\w{4,}") 
>>> myre.findall('Lorem, ipsum! dolör sit? amet...') 
['Lorem', 'ipsum', 'dolör', 'amet'] 

En Python 2, que tendría que utilizar

>>> myre = re.compile(r"\w{4,}", re.UNICODE) 
>>> myre.findall(u'Lorem, ipsum! dolör sit? amet...') 
[u'Lorem', u'ipsum', u'dol\xf6r', u'amet'] 
2

Eso es un caso típico el uso de listas por comprensión en Python, que puede ser utilizado para el filtrado:

text = 'Lorem ipsum dolor sit amet' 
result = [word for word in pattern.findall(text) if len(word) > 3] 
+0

pero ¿y si tengo "Lorem, ipsum"? Esta expresión devolverá 'Lorem', 'ipusm'. No necesito la coma. – szaman

+0

Ok - Lo actualicé para usar realmente la expresión regular - la otra respuesta suponía que ni siquiera necesitaría expresiones regulares. El método "findall" de expresiones regulares es lo que falta. – jsbueno

2

pattern = re.compile("\w\w\w(\w+)")
result = pattern.search('Lorem ipsum dolor sit amet').groups()

+0

"Ahora tienes dos problemas". : D http://regex.info/blog/2006-09-15/247 – daramarak

0
pattern = re.compile(r'(\S{4,})') 
pattern.findall('Lorem ipsum dolor sit amet') 
['Lorem', 'ipsum', 'dolor', 'amet'] 
+0

haga caso omiso de mi respuesta. Tim Pietzcker maneja casos como "¿sentarse?" correctamente – albertov

Cuestiones relacionadas