[英]Java Regex - Split comma separated list but exclude commas within square brackets
[英]How to split a string into array with regex (by commas that are NOT within the brackets)?
我需要将字符串拆分为数组。
String test = "test (18,2,3) ,(,Test (,)), Test";
我希望按括号内的逗号分开。 这就是我所需要的
test (18,2,3)
(,Test (,))
Test
我试过了
String test = "test (18,2,3) , (,Test (,)) , Test";
String colVals [] = test.split("[^(.*,.*)] | ,");
System.out.println(colVals[0]);
System.out.println(colVals[1]);
System.out.println(colVals[2]);
但是结果却不是我所期望的
我不知道您是否可以控制CSV格式; 如果不是,请忽略此答案。
您应该有一个用于在CSV中转义文字逗号的系统。 不幸的是,这样做没有统一的标准。 有些人使用反斜杠转义:
test (18\,2\,3) ,(\,Test (\,)), Test
其他人则使用可选的引号:
"test (18,2,3) ","(,Test (,))", Test
另外一种选择是使用制表符而不是逗号,如果您知道不会有任何文字制表符(或者如果有,但是将它们更改为\\t
)。 我将使用->
代表制表符:
test (18,2,3) ->(,Test (,))-> Test
注意:这些都是字符串本身-字符串文字需要进一步转义: test = "test (18\\\\,2\\\\,3) ,(\\\\,Test (\\\\,)), Test"
, test = "\\"test (18,2,3) \\",\\"(,Test (,))\\", Test"
或test = "test (18,2,3) \\t(,Test (,))\\t Test"
。
如果使用这些方法之一,则可能可以找到用于解析CSV的库。 或者,如果您使用制表符而不是逗号,则只需执行以前的操作,然后拆分制表符即可。
如果您手头上有太多时间,可以尝试自己编写一些东西。 我不认为可以用相同的方式完成操作-您必须编写一个与逗号(而不是逗号本身)之间的子字符串匹配的正则表达式,然后创建一个java.util.regex.Matcher对象,使用matcher.find()
遍历字符串,并matcher.find()
匹配子字符串中包含的任何反斜杠。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.