我正试图将以下内容拆分为一个列表。
"[A,B], [C,D]";
我需要输出为:
[A,B]
[C,D]
我尝试了以下操作,但得到的输出为:
[A,B
[C,D]
代码:
ArrayList result = new ArrayList(Arrays.asList(inp.split("\],")));
谢谢。
使用
inp.split(",\s*(?![^\[]*\])")
请参阅正则表达式证明。如果在这之后没有任何不同于[
和]
的字符,它将匹配逗号和后面的任何空白。
您可以使用,s*(?=[)
,意思是
,
逗号s*
后面跟任意数量的空间(包括0((?=[)
后面直接跟一个打开的方括号(但是
ArrayList<String> result = new ArrayList<>(Arrays.asList(inp.split(",\s*(?=\[)")));
如果您想要该数据的格式,可以使用G
锚点来获得迭代匹配。
然后,您可以循环匹配并将捕获组1添加到列表中。
G([[A-Z],[A-Z]])(?:,h*)?
零件:
G
断言上一个匹配的末尾或字符串开头的位置(
捕获组1[[A-Z],[A-Z]]
)
关闭组1(?:,h*)?
(可选(匹配,
和0+水平空白字符
Regex演示| Java演示
示例代码
String regex = "\G(\[[A-Z],[A-Z]])(?:,\h*)?";
String string = "[A,B], [C,D]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
List<String> result = new ArrayList<String>();
while (matcher.find()) {
result.add(matcher.group(1));
}
for (String element : result)
System.out.println(element);
输出
[A,B]
[C,D]