繁体   English   中英

如何使用正则表达式将字符串拆分为数组(用括号中的逗号分隔)?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM