Java正则表达式找不到数字

时间:2011-11-18 03:18:30

标签: java regex

我试图解析一些文本,但由于一些奇怪的原因,Java正则表达式不起作用。例如,我尝试过:

    Pattern p = Pattern.compile("[A-Z][0-9]*,[0-9]*");
    Matcher m = p.matcher("H3,4");

当我尝试获取数字m.group(1)和m.group(2)时,它只是给出了无匹配的异常。我是否遗漏了Java正则表达式的工作原理?

2 个答案:

答案 0 :(得分:5)

  1. 您必须先在匹配器上调用matches()find()
  2. 您的正则表达式实际上必须包含捕获组
  3. 示例:

    Pattern p = Pattern.compile("[A-Z](\\d*),(\\d*)");
    matcher m = p.matcher("H3,4");
    if (m.matches()) {
        // use m.group(1), m.group(2) here
    }
    

答案 1 :(得分:0)

您还需要括号来指定每个组的一部分。我将前导部分改为任何不是数字的东西,0次或更多次。每组中的数字是1位或更多位数。所以,不是*而是+。

Pattern p = Pattern.compile("[^0-9]*([0-9]+),([0-9]+)");
Matcher m = p.matcher("H3,4");
if (m.matches())
{
  String g1 = m.group(1);
  String g2 = m.group(2);
}