正则表达式:如何匹配没有连续元音的单词?

时间:2016-08-10 00:15:55

标签: python regex

我对正则表达式真的很陌生,而且我能够很容易地找到可以匹配的正则表达式,但我不确定如何只匹配没有它的单词。

我的.txt文件包含

等字样
sheep
fleece
eggs
meat
potato

我想制作一个正则表达式,用于匹配元音不连续重复的单词,因此会返回eggs meat potato

我对正则表达式没有太多经验,而且我也无法找到关于如何在线进行此操作的任何内容,所以如果有经验丰富的人可以帮助我,那就太棒了。谢谢!

我正在使用python并且已经使用https://regex101.com测试我的正则表达式。

谢谢!

编辑:提供正则表达式的错误结果示例。固定的。

2 个答案:

答案 0 :(得分:9)

请注意,由于所需的输出包含meat但不包括fleece,所以允许所需的单词重复元音,而不是重复的元音。

选择没有重复元音的行:

>>> [w for w in open('file.txt') if not re.search(r'([aeiou])\1', w)]
['eggs\n', 'meat\n', 'potato\n']

正则表达式[aeiou]匹配任何元音(如果您愿意,可以包含y)。正则表达式([aeiou])\1匹配任何元音,后跟相同的元音。因此,not re.search(r'([aeiou])\1', w)仅适用于不包含重复元音的字符串w

附录

如果我们要排除meat,因为它连续有两个元音,即使它们不是相同的元音,那么:

>>> [w for w in open('file.txt') if not re.search(r'[aeiou]{2}', w)]
['eggs\n', 'potato\n']

答案 1 :(得分:1)

@ John1024的答案应该有效 我也会尝试

  

“\ W *(一个{2,} | E {2,} | I {2,} | O {2,} | U {2,})\ W *” IG