简体   繁体   English

在Java中使用模式匹配提取数据

[英]Extarct data using pattern matching in java

I have a requriement in Java to extarct data from the big string using Pattern.compile() . 我有Java要求使用Pattern.compile()从大字符串中提取数据。

INPUT STRING : 输入字符串:

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

OUTPUT : set of 2 string 输出:2个字符串的集合

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

I am trying below code : 我正在尝试下面的代码:

     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));
        }

If I understood you correctly, here is the regex: {(.*)} . 如果我对您的理解正确,那么这里是正则表达式: {(.*)} Note, that you need to mark it as ungreedy. 请注意,您需要将其标记为不满意。

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

Result: 结果:

1 1个

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

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

2 2

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

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

Java example: 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));
    }

Note, that I used escaping characters for the input string. 注意,我在输入字符串中使用了转义字符。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM