python - 第 1 组后面没有第 2 组

标签 python regex

我有一个像这样的正则表达式:

((?:(?<![^aoeiu])(?:y)|[^aoeuiy])*)([ioeua]+(?:(?<![^aoeiu])(?:y)|[^aoeuiy])+)*([ioeua]*)


这就是它在 debuggex.com 上的样子为了更容易可视化: enter image description here

这是我从 pythex.org 得到的结果使用字符串 private 进行测试时:

匹配 1:
1. 公关
2.
3.e

比赛 2:
1. 空
2.无
3. 空

我对结果有两个问题:

  1. 我预计组 1、组 2、组 3 分别为 private。然而,它并不在结果中。

  2. 根据我的理解,如果组 1 包含某些内容,组 2 也包含某些内容,那么连接这两个组将产生一个字符串,该字符串是 private 的子字符串。但是,在匹配 1 中(连接产生 prat),我没有看到字母 i。这是为什么?

我在这里缺少什么吗?

最佳答案

您提供的正则表达式按预期工作,

在第一场比赛中,您的第二组捕获了单词中心的最后一次 VC 迭代(因为您在组括号后输入了贪婪的星号 *),也许您的意思是:

((?:(?<![^aoeiu])(?:y)|[^aoeuiy])*)((?:[ioeua]+(?:(?<![^aoeiu])(?:y)|[^aoeuiy])+)*)([ioeua]*)

相反?

至于第二个空匹配,用加号替换星号(这实际上可能是英语中的合法辅音簇吗?)可以让其完全消失

((?:(?<![^aoeiu])(?:y)|[^aoeuiy])+)((?:[ioeua]+(?:(?<![^aoeiu])(?:y)|[^aoeuiy])+)+)([ioeua]+)

尝试过 https://regex101.com/

关于python - 第 1 组后面没有第 2 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49094060/

相关文章:

javascript - 正则表达式先行

Python Regex - 查找空格但不包括

python - 如何阻止 asyncio 中的进程

python - 对函数中的返回感到困惑

用于闭括号的 JavaScript 正则表达式

java - 特定单词多次出现的正则表达式

python - 使用 ctypes 实现 union 的困惑

python - 错误::UnicodeDecodeError

regex - 为什么这个模式搜索挂了?

python - 从 python 正则表达式中提取两个值