2024-09-30 04:38:32 发布
网友
我得到了一个长字符串,我需要找到包含字符“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?)等。 我得到一张空名单
通过对每个字符串分别应用基于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
>>> re.findall(r"\b\S*d\S*e\S*", ' '.join(l)) ['chdsye847', 'hedle3455', 'xjhd53e', 'de37dp']
使用\S匹配任何不是空格的内容
\S
可能是这样的
\b\w*d\w*e\w*
请注意,您可能可以删除此处的单词边界,因为 第一个\w保证前面有一个单词边界
\w
同样的\w*d\w*e\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)))
输出:
通过对每个字符串分别应用基于regex的搜索,可以大大简化您的解决方案
或者
为什么
re.findall
不起作用?你在搜索一个大的字符串,而你中间贪婪的对手在搜索整个字符串。解决办法是使用
\S
匹配任何不是空格的内容可能是这样的
\b\w*d\w*e\w*
请注意,您可能可以删除此处的单词边界,因为
第一个
\w
保证前面有一个单词边界同样的
\w*d\w*e\w*
您可以过滤结果:
输出:
相关问题 更多 >
编程相关推荐