2011-01-04 2 views
6

Предположим, что у меня есть строка: «Lorem ipsum dolor sit amet» Мне нужен список всех слов с длиной более 3. Могу ли я сделать это с помощью регулярных выражений?Список всех слов, соответствующих регулярному выражению

например.

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

результат содержит «Lorem», «ipsum», «dolor» и «amet».

EDITED:

Слова, которые я имею в виду может только буквы и цифры.

+0

ли вы имеете в виду ASCII буквы, или международные письма, как умлаутов и т.п. также имеет отношение? –

ответ

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

Обратите внимание, что в Python 3, где все строки Unicode, это также найдет слова, которые используют буквы, отличные от ASCII:

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

В Python 2, вы должны использовать

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

Это является типичным примером использования списковых в Python, которые могут использоваться для фильтрации:

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

а что, если у меня есть "Lorem, ipsum"? Это выражение вернет «Lorem», «ipusm». Мне не нужна запятая. – szaman

+0

ОК - я обновил его, чтобы на самом деле использовать регулярное выражение - другой sanswer предполагал, что вам даже не понадобится регулярное выражение. Метод «findall» регулярных выражений - это то, что вам не хватает. – jsbueno

2

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

+0

«Теперь у вас две проблемы». : 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

пренебрегайте моим ответом. Тим Пицкер справляется с такими делами, как «сидеть»? должным образом – albertov

Смежные вопросы