python findall regex表达式

2024-09-30 04:38:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了一个长字符串,我需要找到包含字符“d”和后面的字符“e”的单词

l=[" xkn59438","yhdck2","eihd39d9","chdsye847","hedle3455","xjhd53e","45da","de37dp"]
b=' '.join(l)
runs1=re.findall(r"\b\w?d.*e\w?\b",b)
print(runs1)

\b是单词的边界,后跟任何字符(\w?)等。 我得到一张空名单


Tags: 字符串re字符单词printjoinfindallruns1
3条回答

通过对每个字符串分别应用基于regex的搜索,可以大大简化您的解决方案

>>> p = re.compile('d.*e')
>>> list(filter(p.search, l))

或者

>>> [x for x in l if p.search(x)]

['chdsye847', 'hedle3455', 'xjhd53e', 'de37dp']

为什么re.findall不起作用?你在搜索一个大的字符串,而你中间贪婪的对手在搜索整个字符串。解决办法是

>>> re.findall(r"\b\S*d\S*e\S*", ' '.join(l))
['chdsye847', 'hedle3455', 'xjhd53e', 'de37dp']

使用\S匹配任何不是空格的内容

可能是这样的

\b\w*d\w*e\w*

请注意,您可能可以删除此处的单词边界,因为
第一个\w保证前面有一个单词边界

同样的\w*d\w*e\w*

您可以过滤结果:

import re
l=[" xkn59438","yhdck2","eihd39d9","chdsye847","hedle3455","xjhd53e","45da","de37dp"]

pattern = r'd.*?e'

print(list(filter(lambda x:re.search(pattern,x),l)))

输出:

['chdsye847', 'hedle3455', 'xjhd53e', 'de37dp']

相关问题 更多 >

    热门问题