Java正则表达式不';我找不到数字

Java正则表达式不';我找不到数字,java,regex,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正则表达式的工作原理?是的 必须首先在匹配器上调用matches()或find() 您的正则表达式必须实际包含

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

    Pattern p = Pattern.compile("[A-Z][0-9]*,[0-9]*");
    Matcher m = p.matcher("H3,4");
当我试图得到m.group(1)和m.group(2)的数字时,它只是给出了“找不到匹配项”的例外。我是否遗漏了Java正则表达式的工作原理?

是的

  • 必须首先在匹配器上调用
    matches()
    find()
  • 您的正则表达式必须实际包含捕获组
  • 例如:

    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
    }
    

  • 必须首先在匹配器上调用
    matches()
    find()
  • 您的正则表达式必须实际包含捕获组
  • 例如:

    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
    }
    

    您还需要括号来指定每个组的组成部分。我将前导部分更改为非数字的任何内容,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);
    }
    

    您还需要括号来指定每个组的组成部分。我将前导部分更改为非数字的任何内容,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);
    }
    
    有关代码示例,请参阅。有关代码示例,请参阅。