正则表达式匹配多个正向预测组

珍娜·艾伦(Jenna Allen)

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

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

我不太喜欢正则表达式语言,所以我将自己定义:

类别1是(选项1 |选项2),类别2是(选项3 |选项4),类别3是(选项5 |选项6),依此类推。

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

一些文本选项3一些文本选项8一些文本选项1

或者

一些文字2选项一些文字选项8一些文字选项1一些文字选项6

我不想捕获这样的值:

一些文本选项3一些文本选项8-仅表示2个类别

或者

一些文本选项3一些文字3选项一些更多的文本选项1(选项3和4是从相同的类别)

这些选项可以按任意顺序出现在文本中,因此这就是为什么我使用正向前瞻,但是我不知道如何在多个正向前瞻上添加一个量词。

就正则表达式引擎而言,我必须在后台使用由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 )

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

这种方法的局限性是显而易见的。您只需要再添加一组options就可以完全摆脱困境。我认为使用非正则表达式解决方案会更好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式:正向和负向预测 (JS)

来自分类Dev

Ruby 正则表达式排除多个具有正向预测的项目

来自分类Dev

正向匹配后的正则表达式匹配模式

来自分类Dev

正则表达式匹配多个组

来自分类Dev

Java正则表达式匹配器-多个组

来自分类Dev

Python正则表达式:提取多个匹配组

来自分类Dev

Python正则表达式不匹配多个组

来自分类Dev

正则表达式-匹配多个组

来自分类Dev

在Java正则表达式中匹配多个组

来自分类Dev

正则表达式正向预示不会阻止匹配

来自分类Dev

正则表达式多次匹配正向提前

来自分类Dev

正则表达式匹配组

来自分类Dev

正则表达式的多个匹配

来自分类Dev

多个正则表达式匹配

来自分类Dev

正则表达式匹配多个表达式?

来自分类Dev

c#匹配多个正则表达式组,使每个匹配项/单词分开

来自分类Dev

c#匹配多个正则表达式组,使每个匹配项/单词分开

来自分类Dev

正则表达式如何匹配匹配的组

来自分类Dev

如何获取多个正则表达式匹配捕获组

来自分类Dev

匹配字符串,其中多个捕获组在正则表达式中必须不同

来自分类Dev

正则表达式匹配一个或多个组太多

来自分类Dev

在 Scala 中匹配多个正则表达式模式时忽略组

来自分类Dev

正则表达式匹配集合多个匹配

来自分类Dev

POSIX ERE中的正向后看或非捕获组(扩展正则表达式)

来自分类Dev

如何合并正则表达式组匹配?

来自分类Dev

正则表达式组与空间匹配

来自分类Dev

Swift正则表达式-如何提取匹配的组

来自分类Dev

复杂正则表达式与捕获组匹配

来自分类Dev

正则表达式匹配JavaScript中的反向组