Java регулярное выражение не находит номера - PullRequest
0 голосов
/ 18 ноября 2011

Я пытаюсь разобрать текст, но по какой-то странной причине регулярное выражение 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 ]

5 голосов
/ 18 ноября 2011

Да.

  1. Вы должны сначала вызвать matches() или find() на устройстве сопоставления.
  2. Ваше регулярное выражение должно фактически содержать группы захвата

Пример:

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 голосов
/ 18 ноября 2011

Вам также необходимо указать круглые скобки, чтобы указать, что входит в каждую группу. Я изменил ведущую роль на что-нибудь, что не является цифрой, 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...