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

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

我很难解决这个问题

  1. input: [{"acks":"6"},{"acks":"7"},{"acks":"8"}]
  2. regex: [\{]*["acks:"]
  3. current output: [6},7},8}]
  4. desired output: [6,7,8]

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

axzmvihb

axzmvihb1#

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

  1. import java.util.regex.*;
  2. import java.util.*;
  3. import java.util.function.Supplier;
  4. class HelloWorld {
  5. public static void main(String[] args) {
  6. Pattern p = Pattern.compile("(?:\"[\\w]+\":\")(\\d+)");
  7. Matcher m = p.matcher("[{\"acks\":\"6\"},{\"acks\":\"7\"},{\"acks\":\"8\"}]\t");
  8. List<String> llist = new LinkedList<String>();
  9. while (m.find()) {
  10. llist.add(m.group(1));
  11. }
  12. if(llist.size() == 0) {
  13. System.out.println("No match found.");
  14. } else {
  15. System.out.println("Output : " + llist.toString());
  16. }
  17. }
  18. }
展开查看全部
kh212irz

kh212irz2#

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

e7arh2l6

e7arh2l63#

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

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

输出量

  1. [6, 7, 8]
46qrfjad

46qrfjad4#

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

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

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

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

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

相关问题