首页 > 解决方案 > 使用逗号分割文本,但忽略字符串中的任何字符

问题描述

我有一个奇怪的情况,我需要使用分隔符拆分如下文本,(,)但必须忽略字符串中的逗号。我已经使用正则表达式模式实现了它,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)

现在的问题是我的文本包含字符串但也包含一个单独的双引号(")。我无法更改文本,因为此数据是由某些数据引擎生成的。

这是我需要拆分的文本-

355,170102,204500,204509,10,"SOME TEXT 10"","COM","COM","未拆分"

请注意,有一个额外的双引号"SOME TEXT 10""不是成对的。由于此拆分不适用于此类文本。

我期待结果如下 -

355
170102
204500
204509
10
"SOME TEXT 10"
"COM"
"COM"
"Not Split"

但得到的结果是-

355,170102,204500,204509,10,"SOME TEXT 10""
"COM"
"COM"
"Not Split"

如何实现这一目标?任何线索将不胜感激。

标签: c#regexsplit

解决方案


如果您要将正则表达式更改为:

,(?=(?:[^"]*"[^"]*""?)*[^"]*$)

在字符串的右双引号之后添加和附加的可选",那么您最终会得到以下拆分:

355
170102
204500
204509
10
"SOME TEXT 10""
"COM"
"COM"
"Not Split"

问题是"SOME TEXT 10""字符串,你可能可以忍受。但是,如果您进一步将正则表达式修改为:

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

",当它前面是输入和产量的第一个带引号的字符串时,它也会拆分:

355
170102
204500
204509
10
"SOME TEXT 10"
"COM"
"COM"
"Not Split"

参见 C# 演示


推荐阅读