匹配正则表达式的所有单词列表

9 投票
4 回答
18685 浏览
提问于 2025-04-16 09:23

假设我有一个字符串:“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'。

补充说明:

我说的单词只能包含字母和数字。

4 个回答

2

这是一个在Python中使用列表推导式的典型例子,列表推导式可以用来过滤数据:

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

这段代码的意思是,我们在用一种叫做“正则表达式”的工具来找一些特定的文字模式。

首先,pattern = re.compile("\w\w\w(\w+)")这行代码是在创建一个模式。这里的\w代表一个字母、数字或者下划线,而\w\w\w就是指三个这样的字符。后面的(\w+)表示我们想要找的是在这三个字符后面,至少有一个或多个字母、数字或下划线的部分。

接下来,result = pattern.search('Lorem ipsum dolor sit amet')这行代码是在搜索字符串“Lorem ipsum dolor sit amet”中是否有符合我们刚才定义的模式的部分。

最后,.groups()这个方法会把找到的结果以一个元组的形式返回,方便我们后续使用。

19
>>> 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']

撰写回答