【发布时间】:2021-11-03 13:05:35
【问题描述】:
我得到了很多文件,我对这些文件的控制为零,我需要根据分隔符进行拆分。 但是当分隔符在引号内时,我不想拆分。 所以,column1,column2,column3 是
column1
column2
column3
然而 column1, "column2," column3 是
column1
"column2," column3
这可以使用这个 RegEx(在 C# 下)
((?<=\")[^\"]*(?=\"(,|$)+)|(?<=,|^)[^,\"]*(?=,|$))
现在,我的问题是当一行只有一个双引号时(仅打开或关闭) 例如 column1、column2"、column3 返回
column1
column3
虽然它应该返回
column1
column2"
column3
我发现了很多与 RegEx 相关的内容,但在上述特定示例中它们都失败了。
【问题讨论】:
-
您似乎在解析 CSV 文件,为什么不使用built-in library (another link)?如果你只需要parse a CSV string,而不是文件。
-
代码使用 LINQ 来获取行的集合,这些行使用 RegEx 进行拆分。我无法更改该部分,因为它已被许多其他组件使用。
-
所以你的分隔符应该是文件中没有用引号括起来的任何行?
-
密码是什么?如果你使用
.Matches,你可能只使用Regex.Matches(text, "(?:\"[^\"]*\"|[^,])+")。 -
@wizard 那么我认为
Regex.Matches(text, "(?:\"[^\"]*\"|[^,])+|(?<![^,])(?![^,])")会起作用。
标签: c# regex split delimiter quotes