C# Regex 使用定界符拆分行,但忽略引号内的定界符

C# Regex to split row with delimiter, but ignore delimiter inside quotes

我收到很多文件,我对这些文件的控制为零,我需要根据分隔符进行拆分。 但是当定界符在引号内时,我不想拆分。 所以,column1, column2, column3 是

column1
column2
column3

然而 column1, "column2," column3 是

column1
"column2," column3

这可以使用此 RegEx(在 C# 下)

((?<=\")[^\"]*(?=\"(,|$)+)|(?<=,|^)[^,\"]*(?=,|$))

现在,我的问题是当一行只有一个双引号(仅打开或关闭) 例如 column1, column2", column3 returns

column1

column3

应该return

column1
column2"
column3

我发现了很多与 RegEx 相关的内容,但在上面的特定示例中都失败了。

您可以使用

匹配您需要的所有字段
Regex.Matches(text, "(?:\"[^\"]*\"|[^,])+|(?<![^,])(?![^,])")

regex demo详情:

  • (?:\"[^\"]*\"|[^,])+ - 出现一次或多次
    • "[^"]*" - 一个 ",除 " 之外的零个或多个字符,然后是一个 "(如果里面可以有 "",替换"[^"]*(?:""[^"]*)*")
    • | - 或
    • [^,] - 除了 ,
    • 之外的任何字符
  • | - 或
  • (?<![^,])(?![^,]) - 位于字符串开头或紧跟逗号的位置,以及位于末尾或紧跟逗号的位置。