我正在尝试使用 VB.NET 解析 csv 文件。
csv 文件包含像 0,"1,2,3",4 这样的值,它分成 5 个而不是 3 个。 Stockoverflow 中有许多其他语言的示例,但我无法在 VB.NET 中实现它。
到目前为止,这是我的代码,但它不起作用......
Dim t As String() = Regex.Split(str(i), ",(?=([^\""]*\""[^\""]*\"")*[^\""]*$)")
最佳答案
假设您的 csv 格式正确(即没有 "
除了用于分隔字符串字段的那些,或者除了像 \"
那样转义的),您可以用逗号分隔,后跟 偶数个非转义的 "-marks 。(如果你在一组 ""中,那么行中只剩下奇数个)。
您尝试过的正则表达式看起来差不多了。
以下查找逗号后跟任意类型引号的偶数:
,(?=([^"]*"[^"]*")*[^"]*$)
要修改它以查找偶数个非转义引号(假设引号用反斜杠转义,如
\"
),我替换每个 [^"]
与 ([^"\\]|\\.)
.这意味着“匹配一个不是“并且不是黑斜杠的字符,或者匹配一个反斜杠和紧跟在它后面的字符”。,(?=(([^"\\]|\\.)*"([^"\\]|\\.)*")*([^"\\]|\\.)*$)
看到它在行动 here .
(反斜杠加倍的原因是我想匹配文字反斜杠)。
现在要将其放入 vb.net,您只需要将所有引号加倍:
splitRegex = ",(?=(([^""\\]|\\.)*""([^""\\]|\\.)*"")*([^""\\]|\\.)*$)"
关于regex - 用逗号分割的正则表达式 + 忽略双引号内的逗号。网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9169514/