【发布时间】:2018-04-28 13:52:40
【问题描述】:
我正在尝试匹配包含两个或多个不同元音的字符串中的单词。问题可以限制为小写。
string = 'pool pound polio papa pick pair'
预期结果:
pound, polio, pair
pool 和 papa 会失败,因为它们只包含一个不同的元音。但是,polio 很好,因为即使它包含两个 os,它也包含两个不同的元音(i 和 o)。 mississippi 会失败,但albuquerque 会通过)。
思考过程:使用环视,大概五次(忽略大写),用括号括起来,然后是{2}。比如:
re.findall(r'\w*((?=a{1})|(?=e{1})|(?=i{1})|(?=o{1})|(?=u{1})){2}\w*', string)
但是,这匹配所有六个单词。
我杀死了{1}s,这使它更漂亮({1}s 似乎没有必要),但它仍然返回所有六个:
re.findall(r'\w*((?=a)|(?=e)|(?=i)|(?=o)|(?=u))\w*', string)
提前感谢您的帮助。我检查了其他查询,包括"How to find words with two vowels",但似乎没有一个足够接近。另外,我正在寻找纯正则表达式。
【问题讨论】:
-
“{1} 似乎没有必要”表明您不太了解它的作用。括号使事情不清楚,但我认为您不能重复前瞻两次 - 如果语法允许(显然它确实如此,因为否则您会收到错误),那么它会测试相同的前瞻 两次.