【发布时间】:2021-11-26 17:04:21
【问题描述】:
我有一个奇怪的情况,我需要使用 demeter(,) 拆分如下文本,但必须忽略字符串中的逗号。我已经使用正则表达式模式,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)
现在的问题是我的文本包含字符串,但也包含一个单独的双引号(")。我无法更改文本,因为此数据是由某些数据引擎生成的。
这是我需要拆分的文本-
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"
但是得到的结果是-
355,170102,204500,204509,10,"SOME TEXT 10""
"COM"
"COM"
"Not Split"
如何做到这一点?任何线索将不胜感激。
【问题讨论】:
-
您需要详细定义规则。如果这是常见的 CSV 输入,则应该定义一个转义字符,并且一个常见的示例看起来像这样
123,"Text""with quotest"- 原因:如果这个额外的引号没有转义字符并且允许在您的文本中的任何地方出现并且允许文本包含逗号,则无法拆分。示例:"This "funny","short" example"- 是指This "funny、short" example还是This "funny","shrt" example? -
顺便说一句:如果这是 CSV 输入,我会考虑使用 lib,因为 CSV 有边缘情况。参见例如CSVHelper。
-
@ChristophLütjen CSVHelper 可以处理字段内容中的“狂野”、未转义的引号吗?像这里一样,
"SOME TEXT 10""? -
CSVHelper 无法处理非标准 CSV 文件(这似乎是)。我很想回到你从哪里得到这个文件,问为什么有一个未转义的双引号。
-
这个示例列是正确的
"SOME TEXT 10""还是应该是`""SOME TEXT 10""?