regex 带花括号的java正则表达式

dsf9zpds  于 2023-06-30  发布在  Java
关注(0)|答案(4)|浏览(114)

我很难解决这个问题

input: [{"acks":"6"},{"acks":"7"},{"acks":"8"}]
regex: [\{]*["acks:"]
current output: [6},7},8}]
desired output: [6,7,8]

我遇到了结尾花括号的问题。
谢谢你提前帮我!!

axzmvihb

axzmvihb1#

你可以试试这个regexp (?:\"[\\w]+\":\")(\\d+)

import java.util.regex.*;
import java.util.*;
import java.util.function.Supplier;

class HelloWorld {
    public static void main(String[] args) {

    Pattern p = Pattern.compile("(?:\"[\\w]+\":\")(\\d+)");
    Matcher m = p.matcher("[{\"acks\":\"6\"},{\"acks\":\"7\"},{\"acks\":\"8\"}]\t");  

    List<String> llist = new LinkedList<String>();
    while (m.find()) {    
        llist.add(m.group(1));
    }    
    if(llist.size() == 0) {    
        System.out.println("No match found.");    
    } else {
        System.out.println("Output : " + llist.toString());
    }
   }
}
kh212irz

kh212irz2#

不清楚你到底想干什么。
如果你只想去掉[],和digits,你可以使用下面的正则表达式将其他所有内容替换为空字符串:[^\d,[\]]+
如果您只需要从具有单个字段“acks”的对象中提取数字,则可以将\{"acks":"(\d+)"\}替换为$1
演示here

e7arh2l6

e7arh2l63#

只需检查\"acks\":字符以及开始和结束的"字符。
检查{似乎没有必要。

\"acks\":\"(.+?)\"
String string = "{\"acks\":\"6\"},{\"acks\":\"7\"},{\"acks\":\"8\"}";
Pattern pattern = Pattern.compile("\\\"acks\\\":\\\"(.+?)\\\"");
Matcher matcher = pattern.matcher(string);
List<String> list = new ArrayList<>();
while (matcher.find()) list.add(matcher.group(1));

输出量

[6, 7, 8]
46qrfjad

46qrfjad4#

这应该适用于所描述的情况:

System.out.println("[{\"acks\":\"6\"},{\"acks\":\"17\"},{\"acks\":\"888\"}]".replaceAll("(\\{\"acks\":\")*(\"})*", ""));

结果:[6,17,888]
我可以看到,有一些注解,而不是“acks”键可能是任何符号,因此我建议使用下一个regexp (\{.*?:\")*(\"})*https://regex101.com/r/kfAYsQ/1

System.out.println("[{\"key1\":\"6\"},{\"key2\":\"17\"},{\"key3\":\"888\"}]".replaceAll("(\\{.*?:\")*(\"})*", ""));

输入:[{\"key1\":\"6\"},{\"key2\":\"17\"},{\"key3\":\"888\"}]
结果:[6,17,888]

相关问题