Как отловить группы, встречающиеся более одного раза, используя регулярное выражение в Java - PullRequest
0 голосов
/ 28 января 2020

Учитывая этот пример входной строки.

String str = 
   "[{\"ID\":\"A001\",\"Name\":\"Captain America\",\"State\":\"Brooklyn\"},
     {\"ID\":\"A002\",\"Name\":\"Iron Man\",\"State\":\"New York\"}]"

Я пытаюсь использовать регулярное выражение для извлечения всех значений, связанных с ключом «Имя».

Pattern p = Pattern.compile(".*\"name\":(\".*\").*");  
Matcher m = p.matcher(str);  
if(m.find()){
   System.out.println(m.group(1));
   System.out.println(m.group(2));            
}

Я пытаюсь получить следующий вывод:

Captain America
Iron Man

Но приведенный выше код производит это вместо:

"Iron Man","state":"New York"

Также был бы признателен за рекомендации для методы, позволяющие сделать нечто подобное, работая с теми же данными String непосредственно на Java JSONObject.

1 Ответ

1 голос
/ 28 января 2020

Вы можете сделать это:

public static void main(String[] args) throws IOException {
    String str = "[{\"ID\":\"A001\",\"Name\":\"Captain America\",\"State\":\"Brooklyn\"},{\"ID\":\"A002\",\"Name\":\"Iron Man\",\"State\":\"New York\"}]";
    Pattern p = Pattern.compile("(?<=\"Name\":\")(.*?)(?=\",\"State\")");  
    Matcher m = p.matcher(str);
    while(m.find()){
        System.out.println(m.group(1));
    }
}

Это напечатает:

Captain America
Iron Man

Лучшим вариантом будет использовать JSON Parser ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...