我有一个像这样的正则表达式:
((?:(?<![^aoeiu])(?:y)|[^aoeuiy])*)([ioeua]+(?:(?<![^aoeiu])(?:y)|[^aoeuiy])+)*([ioeua]*)
这就是它在 debuggex.com 上的样子为了更容易可视化:
这是我从 pythex.org 得到的结果使用字符串 private
进行测试时:
匹配 1:
1. 公关
2.在
3.e
比赛 2:
1. 空
2.无
3. 空
我对结果有两个问题:
我预计组 1、组 2、组 3 分别为
pr
、ivat
、e
。然而,它并不在结果中。根据我的理解,如果组 1 包含某些内容,组 2 也包含某些内容,那么连接这两个组将产生一个字符串,该字符串是
private
的子字符串。但是,在匹配 1 中(连接产生prat
),我没有看到字母i
。这是为什么?
我在这里缺少什么吗?
最佳答案
您提供的正则表达式按预期工作,
在第一场比赛中,您的第二组捕获了单词中心的最后一次 VC 迭代(因为您在组括号后输入了贪婪的星号 *),也许您的意思是:
((?:(?<![^aoeiu])(?:y)|[^aoeuiy])*)((?:[ioeua]+(?:(?<![^aoeiu])(?:y)|[^aoeuiy])+)*)([ioeua]*)
相反?
至于第二个空匹配,用加号替换星号(这实际上可能是英语中的合法辅音簇吗?)可以让其完全消失
((?:(?<![^aoeiu])(?:y)|[^aoeuiy])+)((?:[ioeua]+(?:(?<![^aoeiu])(?:y)|[^aoeuiy])+)+)([ioeua]+)
关于python - 第 1 组后面没有第 2 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49094060/