Beanshell Pattern Matcher Regex - PullRequest
       16

Beanshell Pattern Matcher Regex

0 голосов
/ 06 февраля 2020

У меня есть следующее JSON:

[
    {
        "": "",
        "substituted_restday": "2020-02-01",
        "original_restday": "2020-02-08",
        "id": "15d13f70-c0a852c0-3a925f13-6dca1982",
        "_UNIQUEKEY_": "15d1592a-c0a852c0-3a925f13b7c65023",
        "parentId": ""
    }, 
    {
        "": "",
        "substituted_restday": "2020-02-03",
        "original_restday": "2020-02-09",
        "id": "15d14d55-c0a852c0-3a925f13-727b70af",
        "_UNIQUEKEY_": "15d1592a-c0a852c0-3a925f13-3711a584",
        "parentId": ""
    }
]

Я хочу извлечь "дату" из "subst_restday", то есть 2020-02-01 и 2020-02-03.

У меня есть следующий код, но результат не очень хороший:

Pattern pattern = Pattern.compile("((\"substituted_restday\":\")[0-9-]+)");
Matcher matcher = pattern.matcher(JSON);
System.out.println(matcher.find());                     
if (matcher.find()){
    System.out.println(matcher.group(0));
    System.out.println(matcher);
    System.out.println("group count:" + matcher.groupCount());
    for (int i = 0; i <= matcher.groupCount(); i++) {
        System.out.println(i + ":" + matcher.group(i));
    }
}

Я вижу, что "matcher.find ()" имеет значение true. Но matcher.group не имеет значения. Пожалуйста помоги.

1 Ответ

0 голосов
/ 06 февраля 2020

Вы должны l oop по сопоставленному шаблону и затем получить доступ к group(1):

public static void main(String[] args) {
    Pattern pattern = Pattern.compile("\"substituted_restday\": \"([0-9-]+)\"");
    Matcher matcher = pattern.matcher(JSON);
    while(matcher.find()){
        System.out.println(matcher.group(1));
    }
} 

Выход будет:

2020-02-01
2020-02-03

Если вы получите доступ group(0) вывод:

 "substituted_restday": "2020-02-01"
 "substituted_restday": "2020-02-03"

Группы обозначены скобками

group(0): ("\"substituted_restday\": \"([0-9-]+)\"")

group(1): ([0-9-]+)

...