RegEx:将Big - OR - Group的子组作为个体处理,而不是作为组计数

时间:2017-06-08 07:50:54

标签: java python regex

我们说我有这种模式:

(?: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中执行此操作?

1 个答案:

答案 0 :(得分:2)

一般来说,正则表达式不起作用。群组从左到右编号,你无能为力。

也就是说,python的regex module做得与众不同。它会将这两个群体视为#1。不幸的是,我不知道Java是否存在这样的事情。

但是,我认为这里的真正的解决方案是让用户输入不同的正则表达式。例如,你的正则表达式可以写成(StackOverflow is )?(.+)(?(1)| is StackOverflow),它在功能上是等价的,除了你匹配的单词总是在#2组中。 (当然,如果必须在组#1中捕获绝对单词,则此解决方案不起作用。)