如何使用Python正则表达式查找所有有字母出现两次的单词?
我正在学习如何在Python中使用正则表达式。我遇到了一个关于查找单词中包含某个字母频率的单词的问题 给定一个单词列表,例如,['elle','househouse','lel','bye',],我想使用正则表达式查找正好有2个'l'的单词,而不管字母的位置如何。 因此,在本例中,返回列表应为['elle','lel']实际上,请在此处使用计数器:如何使用Python正则表达式查找所有有字母出现两次的单词?,python,regex,python-3.x,Python,Regex,Python 3.x,我正在学习如何在Python中使用正则表达式。我遇到了一个关于查找单词中包含某个字母频率的单词的问题 给定一个单词列表,例如,['elle','househouse','lel','bye',],我想使用正则表达式查找正好有2个'l'的单词,而不管字母的位置如何。 因此,在本例中,返回列表应为['elle','lel']实际上,请在此处使用计数器: from collections import Counter lst = ['elle','household','lel','bye'] d
from collections import Counter
lst = ['elle','household','lel','bye']
double_l = [word
for word in lst
for c in [Counter(word)]
if c['l'] == 2]
print(double_l)
# ['elle', 'lel']
如果您坚持为什么?这就是使用正则表达式计算的方式:
^(?:[^l]*l){2}[^l]*$
这段闪亮的代码说:
^ # bound the expression to the start
(?:[^l]*l){2} # not an l, followed by an l, two times
[^l]* # no l thereafter
$ # the end
请参阅。尝试以下正则表达式
^[^l]*l[^l]*l[^l]*$
这将查找两个l字符,其中在前面、中间和后面有零个或多个其他字符。此外,^和$确保匹配的字符都是相同的。您尝试了什么-我设法解决了可能重复的问题,但感觉效率低下。首先,我选择有一个或多个“l”的单词。然后使用for循环,将其分解为字符列表,然后计算出现的“l”。如果频率等于2,则放入新列表。@Jan,你和我同时写作。因为没有答案,我写了我的。在我按下提交键后,我第一次看到了你的。我相信我的正则表达式比你的简单,因此更容易理解。