JAVA регулярные выражения. Найти по шаблону слово и из этого слова извлечь "подслово" [дубликат]

217
15 апреля 2022, 16:30
На этот вопрос уже дан ответ здесь:
Как вытащить часть строки с помощью регулярного выражения (1 ответ)
Закрыт 1 год назад.

Здраствуйте. Надо в JAVA регулярным выражением найти по шаблону слово и из этого слова извлечь "подслово". Пример:

    String str = "<person userID=\"001\">";
    Pattern pattern = Pattern.compile("userID=\"\\w*\""); 
    Matcher match = patt.matcher(str);
    if(match.find())
        System.out.printf("found: %s", match.group("(^userID=\")\\w*\""));

Находим строку userID="001". Можно ли выражением

match.group("(^userID=\")\\w*\"");

извлечь только 001 ? Если да, подскажите пожалуйста, как это можно сделать? Или если есть какой-нибудь другой способ.

Answer 1

Для начала определимся с методом group(). Он не может принимать в качестве аргумента регулярное выражение. Он предназначен для работы с захватываемыми группами, то есть на вход этому методу даётся либо номер либо имя группы.

Поэтому предлагаю завернуть нужное вам подслово в группу и затем извлечь его. Поскольку в этом примере одна группа, то и дополнительных аргументов методу передавать не нужно. :)

String str = "<person userID=\"001\">";
Pattern pattern = Pattern.compile("userID=\"(\\w*)\"");
Matcher match = pattern.matcher(str);
if (match.find()) {
    System.out.println(match.group(1));
}

//в методе match.group(1) нужно было указать номер группы, но всё равно спасибо за развёрнутый ответ )

Answer 2

Сделайте так

  public static void main(String[] args) {
    String str = "<person userID=\"001\">";
    Pattern pattern = Pattern.compile("userID=(\"\\w*\")");
    Matcher match = pattern.matcher(str);
    if (match.find()) System.out.printf("found: %s", match.group(1));
  }
READ ALSO
Java. Как найти объект в ArrayList&#39;е?

Java. Как найти объект в ArrayList'е?

Задание создать ArrayList с продуктами, у которых есть название, id, и количествоА затем осуществить поиск по части названия и вывести подходящие...

241
Uncaught (in promise) Promise.then(async) Spring REST

Uncaught (in promise) Promise.then(async) Spring REST

Первый раз используя spring REST и vue jsVue не может найти postmapping, я так понял что это из-за промиса

190
Десериализация JSON строки, если строка не фиксированная, может быть с разным количеством ответов

Десериализация JSON строки, если строка не фиксированная, может быть с разным количеством ответов

Андроид приложение выполняет запрос в базу данных и получает ответ в JSON, ответ приходит в виде вложенных массивов(строки БД)И вот этих ответов...

195