使用java中的模式匹配的Extarct数据

时间:2017-06-16 09:04:32

标签: java regex matching

我在Java中要求使用Pattern.compile()从大字符串中提取数据。

INPUT STRING:

[{"KEY1" :"VALUE1","KEY2" :"VALUE2","KEY3" :"VALUE3","KEY4" :"VALUE4"},{"KEY1" :"VALUE5","KEY2" :"VALUE6","KEY3" :"VALUE7","KEY4" :"VALUE8"}]

输出: 一套2个字符串

first :  {"KEY1" :"VALUE1","KEY2" :"VALUE2","KEY3" :"VALUE3","KEY4" :"VALUE4"}
second : {"KEY1" :"VALUE5","KEY2" :"VALUE6","KEY3" :"VALUE7","KEY4" :"VALUE8"}

我正在尝试下面的代码:

     ArrayList<String> token_data = new ArrayList<String>();

     String myString = "[{"KEY1" :"VALUE1","KEY2" :"VALUE2","KEY3" :"VALUE3","KEY4" :"VALUE4"},{"KEY1" :"VALUE5","KEY2" :"VALUE6","KEY3" :"VALUE7","KEY4" :"VALUE8"}]"
        System.out.println(myString);
        Pattern p1 = Pattern.compile("\"([^\"]+)\"");
        Matcher m = p1.matcher(myString);

        while(m.find())
        {

            System.out.println(m.group(1)); 
            //m.group(1);
            token_data.add(m.group(1));
        }

1 个答案:

答案 0 :(得分:1)

如果我理解正确,这是正则表达式:{(.*)}。请注意,您需要将其标记为不合格。

正则表达式演示:https://regex101.com/r/x6ZX56/2

结果:

<强> 1

完全匹配:{"KEY1" :"VALUE1","KEY2" :"VALUE2","KEY3" :"VALUE3","KEY4" :"VALUE4"}

第1组:"KEY1" :"VALUE1","KEY2" :"VALUE2","KEY3" :"VALUE3","KEY4" :"VALUE4"

<强> 2

完全匹配:{"KEY1" :"VALUE5","KEY2" :"VALUE6","KEY3" :"VALUE7","KEY4" :"VALUE8"}

第1组:"KEY1" :"VALUE5","KEY2" :"VALUE6","KEY3" :"VALUE7","KEY4" :"VALUE8"

Java示例:

    String input = "[{\"KEY1\" :\"VALUE1\",\"KEY2\" :\"VALUE2\",\"KEY3\" :\"VALUE3\",\"KEY4\" :\"VALUE4\"},{\"KEY1\" :\"VALUE5\",\"KEY2\" :\"VALUE6\",\"KEY3\" :\"VALUE7\",\"KEY4\" :\"VALUE8\"}]";

    Pattern pattern = Pattern.compile("\\{(.*?)}");

    Matcher m = pattern.matcher(input);

    while (m.find()) {
        System.out.println(m.group(1));
    }

请注意,我使用转义字符作为输入字符串。