Regex 正则表达式将无效的CSV行与未替换的引号匹配

Regex 正则表达式将无效的CSV行与未替换的引号匹配,regex,csv,Regex,Csv,假设我有一个字符串文件,比如 11,"abc","def" 12,"ab "c"","def" // invalid 13,"ab,"c"","def" // invalid 14,""a" b,c","def" // invalid 15,""a", "b"c","def" // invalid 正如您所看到的,一些双引号是不可替换的。我想在尝试解析无效字符串之前过滤掉它们 我想做一些类似于,\“+\”,的事情来找到一个令牌,然后检查它是否不包含,“”。但我不知道如何让它工作 我搜索了这么多

假设我有一个字符串文件,比如

11,"abc","def"
12,"ab "c"","def" // invalid
13,"ab,"c"","def" // invalid
14,""a" b,c","def" // invalid
15,""a", "b"c","def" // invalid
正如您所看到的,一些双引号是不可替换的。我想在尝试解析无效字符串之前过滤掉它们

我想做一些类似于
,\“+\”,
的事情来找到一个令牌,然后检查它是否不包含
,“
”。但我不知道如何让它工作

我搜索了这么多,但没有找到一个适合我的答案


谢谢。

如果字符串始终以
开头和结尾“
,您可以尝试使用以下Java正则表达式:

(?<=,\s{0,99}"|(?!\A)\G)[^"]+|(?<=(?!\A)\G|")(")(?!\s*[,\n]|$)

(?以防万一-我更喜欢java兼容的解决方案。您可以添加预期的输出吗?例如:
13,“ab”,“c”,“def”
这可能不是一个您只需要使用正则表达式就可以解决的问题;编写一个解析器一次处理一列要容易得多。假设您不必处理任意格式错误的输入(也就是说,您的无效输入有一些模式)这应该不会太难。@m.cekiera我想忽略无效字符串。@cyrillk您的意思是,
总是有不同的值,或者它也可能在字符串中?谢谢!为什么它会突出显示所有的行?@cyrillk,因为它与not-
匹配。”
逗号和
”后面的字符,或者
符号,如果它跟在已经匹配的文本后面,并且后面没有逗号。第一个匹配(非
字符)是在字符串中只查找“
”标记。同样在Regex101中,
\s{0,99}`将不起作用,因此一个示例没有突出显示,但在Java中它将起作用