Извлечение группы из совпадающей строки в Java с помощью регулярных выражений - PullRequest
2 голосов
/ 13 июня 2019

У меня есть список строк, содержащих такие значения:

String [] arr = {"${US.IDX_CA}", "${UK.IDX_IO}", "${NZ.IDX_BO}", "${JP.IDX_TK}", "${US.IDX_MT}", "more-elements-with-completely-different-patterns-which-is-irrelevant"};

Я пытаюсь извлечь все IDX_XX из этого списка.Таким образом, из приведенного выше списка, я должен иметь, IDX_CA, IDX_IO, IDX_BO и т. Д. С использованием регулярного выражения в Java

Я написал следующий код:

Pattern pattern = Pattern.compile("(.*)IDX_(\\w{2})");
for (String s : arr){
     Matcher m = pattern.matcher(s);
      if (m.matches()){
        String extract = m.group(1);
        System.out.println(extract);
      }
}

Но это ничего не печатает.Может кто-нибудь, пожалуйста, скажите мне, какую ошибку я делаю.Спасибо.

1 Ответ

4 голосов
/ 13 июня 2019

Используйте следующее исправление:

String [] arr = {"${US.IDX_CA}", "${UK.IDX_IO}", "${NZ.IDX_BO}", "${JP.IDX_TK}", "${US.IDX_MT}", "more-elements-with-completely-different-patterns-which-is-irrelevant"};
Pattern pattern = Pattern.compile("\\bIDX_(\\w{2})\\b");
for (String s : arr){
     Matcher m = pattern.matcher(s);
      while (m.find()){
        System.out.println(m.group(0)); // Get the whole match
        System.out.println(m.group(1)); // Get the 2 chars after IDX_
      }
}

См. Демонстрационную версию Java , вывод:

IDX_CA
CA
IDX_IO
IO
IDX_BO
BO
IDX_TK
TK
IDX_MT
MT

ПРИМЕЧАНИЯ :

  • Использовать шаблон \bIDX_(\w{2})\b, который соответствует символам IDX_ и 2 словам между границами слов и захватывает 2 символа после IDX_ в Группу 1
  • m.matches требуется полное совпадение строкипоэтому он заменяется на m.find()
  • if заменяется на while, если в строке более одного совпадения
  • m.group(0) содержит все значения совпадений
  • m.group(1) содержит значения группы 1.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...