如何在忽略转义逗号的同时拆分逗号分隔字符串?

2022-09-01 09:18:57

我需要编写 StringUtils.commaDelimitedListToStringArray 函数的扩展版本,该函数获取一个附加参数:转义 char。

所以叫我的:

commaDelimitedListToStringArray("test,test\\,test\\,test,test", "\\")

应返回:

["test", "test,test,test", "test"]



我目前的尝试是使用 String.split() 使用正则表达式拆分 String:

String[] array = str.split("[^\\\\],");

但返回的数组是:

["tes", "test\,test\,tes", "test"]

有什么想法吗?


答案 1

正则表达式

[^\\],

表示“匹配不是反斜杠的字符,后跟逗号” - 这就是诸如之类的模式匹配的原因,因为是不是反斜杠的字符。t,t

我认为你需要使用某种负面的眼光,来捕捉一个没有前面的字符而不捕获前面的字符,比如,\

(?<!\\),

(顺便说一句,请注意,我故意没有对反斜杠进行双重转义以使本文更具可读性)


答案 2

尝试:

String array[] = str.split("(?<!\\\\),");

基本上,这是在逗号上拆分,除非逗号前面有两个反斜杠。这称为负查看后置零宽度断言