正则表达式匹配以三个'e'结尾的所有单词

时间:2010-12-02 17:57:21

标签: python regex

我正在尝试编写一个正则表达式,匹配所有单词,以便唯一的元音是e,并且单词中只有三个e ,我在python中写这个。我试着写

(?= e){3}[^aiou]*

但它不起作用。

4 个答案:

答案 0 :(得分:6)

你想要三个e,这样两者之间的东西就是非元音。你想要一个单词,即任何一方都有单词边界的东西。

因此:一个单词边界,零个或多个非元音,一个e,零个或多个非元音,一个e,零个或多个非元音,一个e,零个或多个非元音,以及一个单词边界。但我们可以通过对重复模式进行分组来简化:一个单词边界,三次:(零或多个非元音,一个e),零个或多个非元音和一个单词边界。

在正则表达式中说:\b(?:[^aeiou]*e){3}[^aeiou]*\b

答案 1 :(得分:2)

最好单独测试这两个部分 首次使用:

^[^aiou]*$

然后使用:

^([^e]*e[^e]*){3}$

答案 2 :(得分:0)

\s[bcdfghjklmnpqrstvwxyz]*e[bcdfghjklmnpqrstvwxyz]*e[bcdfghjklmnpqrstvwxyz]*e[bcdfghjklmnpqrstvwxyz]*\s

http://rubular.com

答案 3 :(得分:0)

如果你只使用ASCII,我会建议这个解决方案:

(?i)(?=^[^aiouy]*$)^(?:[^e]*e){3}[^e]*$

以下是该模式的演示,从dict列表中随机选择10个匹配的单词:

% perl -ne 'print if /(?i)(?=^[^aiouy]*$)^(?:[^e]*e){3}[^e]*$/' /usr/share/dict/words | 
  perl -e '@a = <>; print splice(@a, rand @a, 1) for 1..10'
centgener
geezer
sceptered
gentlemens
neckweed
whenceeer
tenderer
scentlessness
beswelter
entrenchment

是的,我的演示使用Perl,但该模式在Python中也应该没问题。我不像在Perl中那样灵活地使用Python中的单行程序。 :)