辅音和元音的Python正则表达式
我试图创建一个正则表达式,它允许任何数量的辅音,或任何数量的元音,或辅音和元音的混合,这样我们在开始时只有任何数量的辅音,后面只有任何数量的元音,元音之后不允许有辅音,从示例中可以更清楚地看到: 以下情况应通过:辅音和元音的Python正则表达式,python,regex,Python,Regex,我试图创建一个正则表达式,它允许任何数量的辅音,或任何数量的元音,或辅音和元音的混合,这样我们在开始时只有任何数量的辅音,后面只有任何数量的元音,元音之后不允许有辅音,从示例中可以更清楚地看到: 以下情况应通过: TR, EE, TREE, Y, BY. 但以下内容不应通过表达式: TROUBLE, OATS, TREES, IVY, TROUBLES, PRIVATE, OATEN, ORRERY. 因此,通常可以将其可视化为:[C][V] 辅音
TR, EE, TREE, Y, BY.
但以下内容不应通过表达式:
TROUBLE, OATS, TREES, IVY, TROUBLES, PRIVATE, OATEN, ORRERY.
因此,通常可以将其可视化为:[C][V]
辅音
V元音
[]-其中方括号表示任意存在其内容
我把这段代码写了下来:
import re
def find_m(word):
if re.match("[^aeiou]*?[aeiou]*?",word):
print "PASS"
else:
print "FAIL"
find_m("tr")
find_m("ee")
find_m("tree")
find_m("y")
find_m("by")
find_m("trouble")
find_m("oats")
find_m("trees")
find_m("ivy")
find_m("aaabbbbaaa")
但是它对所有情况都是通过的,我需要一个正确的表达式来给出所需的结果。您需要做的就是在regex的末尾添加另一个锚点
$
if re.match("[^aeiou]*[aeiou]*$",word):
将正则表达式放在字符串末尾。元音后不允许任何内容$
注意
- 您可以从正则表达式中删除非贪婪的
,因为非贪婪对指定的字符类没有任何影响?
- 正则表达式也将匹配空字符串
- 字符串中的必填部分可以通过将
替换为*
来指定。例如,如果输入必须包含元音,则正则表达式必须为+
if re.match("[^aeiou]*[aeiou]+$",word):
- 或者,您可以使用先行检查来检查字符串是否为空,以确保字符串不为空
if re.match("^(?=.+)[^aeiou]*[aeiou]*$",word):
- 字符串中的必填部分可以通过将
测试
$ cat test.py
import re
def find_m(word):
if re.match("[^aeiou]*[aeiou]*$",word):
print "PASS"
else:
print "FAIL"
find_m("tr")
find_m("ee")
find_m("tree")
find_m("y")
find_m("by")
find_m("trouble")
find_m("oats")
find_m("trees")
find_m("ivy")
find_m("aaabbbbaaa")
$ python test.py
PASS
PASS
PASS
PASS
PASS
FAIL
FAIL
FAIL
FAIL
FAIL
@阿维纳什拉吉,我只是在想这个。但OP并没有提到c或v部分是强制性的。所以很难假设这很简单。。只需在第一个位置使用前瞻,如
(?=.*)
@AvinashRaj,这样就可以了。我想到了在任何一组中用+
重新绘制*
之类的东西。我在回答中的注释中添加了这一点: