regex - 用逗号分割的正则表达式 + 忽略双引号内的逗号。网络

标签 regex vb.net

我正在尝试使用 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/

相关文章:

regex - Bash - 与正则表达式匹配的多行数(可能是 oneliner?)

python - 如何从右创建非贪婪正则表达式?

javascript - 我的正则表达式有什么问题,为什么?

ios - 用于检测 javascript 调用函数的正则表达式

mysql - 在 VB.NET 中添加多个数据库

iPhone - URL 有效性的 Reg Exp

asp.net - 设置一个asp :DropDownList的html 'name'属性

vb.net - 从 StringCollection 转换或转换为 ObjectCollection?

VB.NET:将 CSV 文件读入二维数组

c# - WPF文本框字符串格式忽略小数