我们说我有这种模式:
(?:StackOverflow is (.*)|(.*) is StackOverflow)
我使用的是Java或Python。但我认为它们的工作非常相似。
我的输入字符串将是:
StackOverflow is great
或
great is StackOverflow
在实际使用案例中,我不知道模式,我也不知道输入字符串。两者都由用户设置。
我已经使用regex101.com对其进行了测试。
结果如下:
StackOverflow is great
:第0组是great
great is StackOverflow
:第1组是great
但是,我需要两次将组0设为great
。
所以我想要实现的是:只计算那些实际存在于输入字符串中的组。应该忽略大周围OR组的任何其他部分。
我已经在互联网上搜索过,但在这种情况下,我真的不知道要搜索什么。
有没有办法在RegEx中执行此操作?
答案 0 :(得分:2)
一般来说,正则表达式不起作用。群组从左到右编号,你无能为力。
也就是说,python的regex module做得与众不同。它会将这两个群体视为#1。不幸的是,我不知道Java是否存在这样的事情。
但是,我认为这里的真正的解决方案是让用户输入不同的正则表达式。例如,你的正则表达式可以写成(StackOverflow is )?(.+)(?(1)| is StackOverflow)
,它在功能上是等价的,除了你匹配的单词总是在#2组中。 (当然,如果必须在组#1中捕获绝对单词,则此解决方案不起作用。)