Java 是否有一种方法可以将regex分组为一个";或;陈述
我读了关于正则表达式的教程。我尝试使用Java 是否有一种方法可以将regex分组为一个";或;陈述,java,regex,Java,Regex,我读了关于正则表达式的教程。我尝试使用|(或)分组。(用括号())标记),如下所示: add (\\d+) to (\\d+)|(\\d+) plus (\\d+) 匹配文本的示例为“5加6”或“5加6” 然而,第二个选项“5+6”使用第3组和第4组,因为这是同一模式的一部分如果第二个选项匹配,是否可以“排除”前面的组? 显示所述问题的代码: package example.regex.tester; import java.util.regex.Matcher; import java.u
|
(或)分组。(用括号()
)标记),如下所示:
add (\\d+) to (\\d+)|(\\d+) plus (\\d+)
匹配文本的示例为“5加6”或“5加6”
然而,第二个选项“5+6”使用第3组和第4组,因为这是同一模式的一部分如果第二个选项匹配,是否可以“排除”前面的组?
显示所述问题的代码:
package example.regex.tester;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SmartMath {
public static void main(String[] args) {
String textToMatch = "5 + 6";
Pattern add = Pattern.compile("add (\\d+) to (\\d+)|(\\d+) plus (\\d+)");
Matcher additionMatcher = add.matcher(query);
if (additionMatcher.matches() == true) {
int a = Integer.parseInt(additionMatcher.group(1)); // Does not work because groups are numbered as 3 and 4 when "5 plus 6" is used.
int b = Integer.parseInt(additionMatcher.group(2));
System.out.println(a + b);
}
else {
System.out.println("Text does not match.");
}
}
}
您只能在.NET中使用,而不能在Java中使用 您需要重新编写正则表达式,以便它只有2个组。例如
(?:add )?(\\d+) (?:to|plus) (\\d+)
(?:add)?
是可选的,然后我们匹配一个空格,然后匹配一个或多个数字,然后匹配“to”或“plus”,然后匹配一个空格,然后再匹配一个或多个数字。在决定解析哪些数字之前,您可以始终检查是否存在组1和组2,或组3和组4…每当不确定并愿意转到堆栈时,我首先转到,至少它会提高你的测试速度。你只能在一个小时内完成。不是用Java。您需要重新编写正则表达式,如(?:add)?(\\d+)(:to | plus)(\\d+)
。但为了确保您不会以add123+321
结束,您可以在add\\d+to\\d+\d+plus\\d+
格式中使用“向前看”并测试字符串是否为字符串,然后我阅读了答案。非常有创意的解决方案!我不确定这是否正确地解决了OP问题,因为看起来正确的字符串应该是add(\\d+)to(\\d+)
或(\\d+)plus(\\d+)
而不是add(\\d+)plus(\\d+)
。