我无法根据正则表达式拆分字符串。
String str = "1=(1-2,3-4),2=2,3=3,4=4";
Pattern commaPattern = Pattern.compile("\\([0-9-]+,[0-9-]+\\)|(,)") ;
String[] arr = commaPattern.split(str);
for (String s : arr)
{
System.out.println(s);
}
预期产出,
1=(1-2,3-4)
2=2
3=3
4=4
实际输出,
1=
2=2
3=3
4=4
答案 0 :(得分:5)
此正则表达式会根据需要拆分
,(?![^()]*\\))
------------
|->split with , only if it is not within ()
答案 1 :(得分:3)
这不适合split(...)
。考虑通过输入和match
来扫描:
String str = "1=(1-2,3-4),2=2,3=3,4=4";
Matcher m = Pattern.compile("(\\d+)=(\\d+|\\([^)]*\\))").matcher(str);
while(m.find()) {
String key = m.group(1);
String value = m.group(2);
System.out.printf("key=%s, value=%s\n", key, value);
}
会打印:
key=1, value=(1-2,3-4)
key=2, value=2
key=3, value=3
key=4, value=4
答案 2 :(得分:1)
你必须在这里使用一些预见机制。正如我所看到的那样,您正试图将其拆分为不在括号中的逗号。但是你的正则表达式说:
Split on comma OR on comma between numbers in parenthesis
所以你的String会在4个地方分割出来 1)(1-2,3-4) 2-4)逗号
答案 3 :(得分:-4)
String[] arr = commaPattern.split(str);
应该是
String[] arr = str.split(commaPattern);