2011-01-04 13 views
6

Załóżmy, że mam ciąg: "Lorem ipsum dolor sit amet" Potrzebuję listy wszystkich słów o długości większej niż 3. Czy mogę to zrobić za pomocą wyrażeń regularnych?Lista wszystkich słów pasujących do wyrażenia regularnego

np.

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

zawiera "Lorem", "ipsum", "dolor" i "amet".

edycja:

Słowa I oznacza, że ​​można zawiera tylko litery i cyfry.

+0

Czy oznacza liter ASCII, lub są międzynarodowymi litery takie jak znaki akcentowane itp również istotne? –

Odpowiedz

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

Należy pamiętać, że w Pythonie 3, gdzie wszystkie ciągi są Unicode, to również znajdzie słowa, które używają liter spoza ASCII:

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

W Pythonie 2, trzeba by użyć

>>> 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

To jest typowym przypadkiem użycia dla listowych w Pythonie, które mogą być używane do filtrowania:

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

, ale co jeśli mam "Lorem, ipsum"? To wyrażenie zwróci "Lorem", "ipusm". Nie potrzebuję przecinka. – szaman

+0

OK - zaktualizowałem go tak, aby faktycznie korzystał z wyrażenia regularnego - drugi sanswer zakładał, że nie potrzebujesz nawet wyrażeń regularnych. Metoda "findall" wyrażeń regularnych jest tym, czego brakuje. – jsbueno

2

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

+0

"Teraz masz dwa problemy." : 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

zignoruj ​​moją odpowiedź. Tim Pietzcker zajmuje się sprawami typu "siedzieć?" prawidłowo – albertov

Powiązane problemy