正则表达式为JAVA获取可选组

时间:2017-05-20 05:54:21

标签: java regex regex-group

我尝试将来自用量的非英语文本与name=用量用量2匹配为name=用量number=2。我在RegexPlanet上尝试了(\p{L}+)(\d*),它可以正常工作,但是当它在java中运行时,无法从第二个测试用例中获取2

以下是代码:

String pt = "(?<name>\\p{L}+)(?<number>\\d*)";
Matcher m = Pattern.compile(pt).matcher(t.trim());
m.find();
System.out.println("Using [" + pt + "] vs [" + t + "] GC=>" + 
m.groupCount());
NameID n = new NameID();
n.name = m.group(1);

if (m.groupCount() > 2) {
    try {
        String ind = m.group(2);
        n.id = Integer.parseInt(ind);
    } catch (Exception e) { }
}

1 个答案:

答案 0 :(得分:1)

String t = "用量2";
String pt = "^(?<name>\\p{L}+)(?<number>\\d*)$";
Matcher m = Pattern.compile(pt).matcher(t.trim());
if (m.matches()) {
    String name = m.group("name");
    Integer id = m.group("number").length() > 0 ? Integer.parseInt(m.group("number")) : null;
    System.out.println("name=" + name + ", id=" + id); // name=用量, id=2
}

您的正则表达式工作正常,但您的Java代码存在一些问题。请参阅groupCount()的javadoc:

  

组0表示按惯例的整个模式。它不包含在此计数中。