匹配正则表达式的所有单词列表
假设我有一个字符串:“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']