gpt4 book ai didi

Java正则表达式捕获字符串

转载 作者:行者123 更新时间:2023-11-30 10:25:49 25 4
gpt4 key购买 nike

我有以下字符串:

"(1)name1:content1(2)name2:content2(3)name3:content3...(n)namen:contentn"

我想做的是捕获每个 name_icontent_i,我该怎么做?我应该提到 name_i 是未知的。例如name1可以是"abc"name2可以是"xyz"

我尝试过的:

String regex = "\\(\\d\\)(.*):(.*)(?=\\(\\d\\))";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
System.out.println(matcher.group(0);
System.out.println(matcher.group(1);
System.out.println(matcher.group(2);
}

但是效果不是很好。我也试过 matcher.mathes(),什么也不会返回。

最佳答案

你可以使用

String s = "(1)name1:content1(2)name2:content2(3)name3:content3...(4)namen:content4";
Pattern pattern = Pattern.compile("\\(\\d+\\)([^:]+):([^(]*(?:\\((?!\\d+\\))[^(]*)*)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
}

参见 Java demo

详情

  • \\(\\d+\\) - 匹配 (x) 子字符串,其中 x 是 1 个或多个数字
  • ([^:]+) - 第 1 组: 以外的一个或多个字符:
  • : - 冒号
  • ([^(]*(?:\\((?!\\d+\\))[^(]*)*) - 第 2 组:
    • [^(]* - (
    • 以外的零个或多个字符
    • (?:\\((?!\\d+\\))[^(]*)* - 零个或多个序列:
      • \\((?!\\d+\\)) - ( 后跟 1+ 数字和 )
      • [^(]* - (
      • 以外的 0+ 个字符

参见 regex demo .

enter image description here

关于Java正则表达式捕获字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45935140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com