这是我到目前为止拥有的正则表达式:
^(?=.*(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 )
空组用作复选框:如果封闭的前行未成功,则对该组的向后引用将不会成功。最后,非捕获组包含所有五个反向引用中的三个的所有可能组合。
这种方法的局限性是显而易见的。您只需要再添加一组option
s就可以完全摆脱困境。我认为使用非正则表达式解决方案会更好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句