使用正则表达式进行Java拆分
我有以下字符串:使用正则表达式进行Java拆分,java,regex,Java,Regex,我有以下字符串: "\"value,\",0,6" 我应该使用什么样的正则表达式进行拆分,以得到: \"value,\" 0 6 所以基本上我想忽略转义双引号之间的逗号。没有通用的正则表达式。您应该改用CSV库 如果字符串始终是这种形式,则可以使用 (".+?"),(\d+),(\d+) 如果您的文本行是完全兼容的CSV文件,则regex根本就不是一种方式。你应该使用一个 也就是说,考虑到您的条件有限,您可以使用它来拆分:,(?!\”您可以使用它 String str = "8,2,5,\
"\"value,\",0,6"
我应该使用什么样的正则表达式进行拆分,以得到:
\"value,\"
0
6
所以基本上我想忽略转义双引号之间的逗号。没有通用的正则表达式。您应该改用CSV库 如果字符串始终是这种形式,则可以使用
(".+?"),(\d+),(\d+)
如果您的文本行是完全兼容的CSV文件,则regex根本就不是一种方式。你应该使用一个 也就是说,考虑到您的条件有限,您可以使用它来拆分:
,(?!\”
您可以使用它
String str = "8,2,5,\"bache\\\",tache\",vache,\"value,value\",0,6";
Pattern p = Pattern.compile("(?s)\"(?>[^\"\\\\]++|\\\\{2}|\\\\.)*+\"|[^,]++");
Matcher m = p.matcher(str);
while (m.find()) {
String match = m.group();
System.out.println(match);
}
如果出于某种原因不想使用CSV解析器,则可以尝试在循环中使用匹配器,而不是使用拆分:
Pattern p = Pattern.compile("(\"[^\"]*\"|[^,]*)(,|$)");
Matcher m = p.matcher("\"value,\",0,6");
while(m.find()) {
System.out.println(m.group(1));
}
打破这种模式:
(
(第一组的开头)“[^\”]*\”
(引号后面跟一堆非引号字符,后面跟一个引号)
(或者)[^,]*
(一堆非逗号字符)(第一组的末尾)(,|$)
(后面跟一个逗号或字符串的结尾)此函数没有通用的正则表达式。您应该使用CSV库。@OlafDietsche为什么不只是匹配而不是拆分。不幸的是,我没有票数,否则我会关闭它,因为询问代码的问题必须证明对正在解决的问题的最低理解。
@HamZa你是对的,这是可行的。我没有寻找替代方案。