我试图在两个大括号内提取文本,例如给出以下字符串
s = "Some text \test{a}{b}{c} even more "
我只想将b和c中的所有内容提取为字符串。另外,b和c中可能有更多的花括号。我也想提取这个文本。
我一直在查看Java中的一些函数。如下:
String in = "Item(s): \test{x}{y}{z in {X} }";
Pattern p = Pattern.compile("\\{(.*?)\\}");
Matcher m = p.matcher(in);
while(m.find()) {
System.out.println(m.group(1));
}
但是这给了我大括号中的所有内容
a="x"
b="y"
c=" z in {X"
其他问题: 如果字符串有多个不同的卷曲括号,如下所示
s1=" Some text \test{a}{b}{c} even more \foo{d}{e}"
但我仍然只想要b和c。这很容易实现吗?对于这个特定情况,我们可以只进行迭代2和3,但一般情况下,如果有一个较长的文本,其中有多个\ test {} {} {},那就不那么简单了。
s2 = " Some text \test{a1}{b1}{c1} even more \foo{d}{e} and more \test{a2}{b2}{c2} more plus mehr mas"
然后我想要b1,c1和b2以及c2对于这种情况,我们可以使用if条件检查每个“\ test”并且只进行迭代2和3,但这非常难看。
答案 0 :(得分:0)
如果您使用的是apache commons lang API,请尝试StringUtils.substringsBetween。
String[] bet = StringUtils.substringsBetween("Some text \test{a}{b}{c} even more ", "{", "}");
System.out.println(Arrays.asList(bet))
答案 1 :(得分:0)
如果您只有一个嵌套级别,可以尝试:
[{]([^{}]+|[^{}]*[{][^{}]*[}][^{}]*)[}]