我阅读了关于正则表达式的this教程。我尝试使用|
(或)组。 (用括号()
标记),如下:
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.");
}
}
}
答案 0 :(得分:2)
您只能使用named capturing groups在.NET中执行此操作,而不能在Java中执行此操作。
您需要重新编写正则表达式,以便它只有2个组。 E.g。
(?:add )?(\\d+) (?:to|plus) (\\d+)
(?:add )?
是可选的,然后我们匹配一个空格,然后匹配一个或多个数字,然后是“to”或“plus”,然后是空格,再次是1位或更多位数。