提问人:wizard 提问时间:9/6/2021 最后编辑:wizard 更新时间:9/7/2021 访问量:359
C# 正则表达式使用分隔符拆分行,但忽略引号内的分隔符
C# Regex to split row with delimiter, but ignore delimiter inside quotes
问:
我得到了很多文件,在这些文件中我没有任何控制权,我需要根据分隔符进行拆分。 但是当分隔符在引号内时,我不想拆分。 所以,column1、column2、column3 是
column1
column2
column3
然而 column1, “column2,” column3 是
column1
"column2," column3
这使用此正则表达式(在 C# 下)工作
((?<=\")[^\"]*(?=\"(,|$)+)|(?<=,|^)[^,\"]*(?=,|$))
现在,我的问题是当有一行只有一个双引号(仅开始或结束)时 例如 column1、column2“、column3 返回
column1
column3
虽然它应该返回
column1
column2"
column3
我发现了很多与正则表达式相关的正则表达式,但它们在上面的特定示例中都失败了。
答:
1赞
Wiktor Stribiżew
9/7/2021
#1
您可以使用匹配所需的所有字段
Regex.Matches(text, "(?:\"[^\"]*\"|[^,])+|(?<![^,])(?![^,])")
请参阅正则表达式演示。细节:
(?:\"[^\"]*\"|[^,])+
- 出现一次或多次"[^"]*"
- a 、零个或多个字符,然后是 和 a(如果里面可以有,请替换为"
"
"
""
"[^"]*(?:""[^"]*)*"
)|
-或[^,]
- 任何字符,但,
|
-或(?<![^,])(?![^,])
- 位于字符串开头或紧跟逗号的位置,位于末尾或紧跟逗号的位置。
评论
.Matches
Regex.Matches(text, "(?:\"[^\"]*\"|[^,])+")
Regex.Matches(text, "(?:\"[^\"]*\"|[^,])+|(?<![^,])(?![^,])")