python - 正则表达式匹配多个正向先行组

标签 python regex regex-lookarounds

这是我到目前为止的正则表达式:

^(?=.*(option1|option2))(?=.*(option3|option4))(?=.*(option5|option6))(?=.*(option7|option8))(?=.*(option9|option10)).*$

我不熟悉正则表达式语言,所以我会做出自己的定义:

类别 1 是 (option1|option2),类别 2 是 (option3|option4),类别 3 是 (option5|option6),等等

我想捕获至少从 3 个或更多类别中找到 1 个选项的值,如下所示:

一些文字option3一些文字option8一些文字option1

一些文字option3一些更多的文字option8一些更多的文字option1一些更多的文字option6

我不想像这样捕获值:

一些文字option3一些文字option8 - 只代表了2个类别

some text option3 some more text option4 some more text option1 (options 3 and 4 are from the same category)

选项可以在文本中以任何顺序出现,所以这就是我使用正前瞻的原因,但我不知道如何在多个正前瞻上放置量词。

就正则表达式引擎而言,我必须在后台使用由 python 提供支持的前端 UI。我只能使用正则表达式,无法使用任何其他 python 函数。谢谢!

最佳答案

这是一个可以执行您想要的操作的正则表达式(在 VERBOSE 模式下):

^
(?= .* (?: option1 | option2 )  () )?
(?= .* (?: option3 | option4 )  () )?
(?= .* (?: option5 | option6 )  () )?
(?= .* (?: option7 | option8 )  () )?
(?= .* (?: option9 | option10 ) () )?
.*$
(?: \1\2\3 | \1\2\4 | \1\2\5 | \1\3\4 | \1\3\5 |
    \1\4\5 | \2\3\4 | \2\3\5 | \2\4\5 | \3\4\5 )

空组用作复选框:如果封闭的前瞻不成功,对该组的反向引用将不会成功。最后的非捕获组包含五个反向引用中的三个的所有可能组合。

这种方法的局限性很明显;你只需要再添加一组 option 就可以让它完全失控。我认为您最好使用非正则表达式解决方案。

关于python - 正则表达式匹配多个正向先行组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38732671/

相关文章:

python - 如何将经过验证的号码添加到 sinch 沙箱

mysql - 如何在 MySQL 中使用正则表达式?

regex - 在 Linux 终端中使用带有 egrep 的正则表达式查找数字

java - java中如何替换特定字符串?

regex - 捕获匹配组的子字符串

python - 你如何计算一系列随机点的面积?

python - Pandas :计算向下行的字符串标准

python - 在不使用 DOM 方法的情况下迭代解析大型 XML 文件

javascript - javascript 中的正则表达式无法按预期工作

python - 在环视中引用命名组 (Python 2.x)