Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正则表达式进行Java拆分_Java_Regex - Fatal编程技术网

使用正则表达式进行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你是对的,这是可行的。我没有寻找替代方案。