【发布时间】:2015-05-06 13:21:26
【问题描述】:
我知道如何从逗号分隔的字符串中获取子字符串,但这里有一个复杂的问题:如果子字符串包含一个逗号。
如果子字符串包含逗号、换行符或双引号,则整个子字符串用双引号封装。
如果子字符串包含双引号,则双引号会被另一个双引号转义。 最坏的情况是,如果我有这样的事情:
first,"second, second","""third"" third","""fourth"", fourth"
在这种情况下,子字符串是:
- 首先
- 秒,秒
- “第三”第三
- “第四”,第四
second, second 是用双引号封装的,我不希望那些双引号出现在列表/数组中。
"third" third 用双引号封装,因为它包含双引号,并且用附加的双引号进行转义。同样,我不希望在列表/数组中使用封装双引号,也不希望双引号转义双引号,但我想要作为子字符串一部分的原始双引号。
【问题讨论】:
-
我觉得分隔符更适合
;或逗号以外的其他东西。特别是因为您打算在输入中引入逗号。 -
您已经为现有的 CSV 定义了接近“标准”的内容。因此,最简单的选择是找到一个已经存在的解析器。如果您必须自己执行此操作,请考虑使用简单的状态机来跟踪您是否处于引用或未引用的值中。
-
你可以使用正则表达式吗? stackoverflow.com/questions/13915857/…
-
我会像戴夫所说的那样使用正则表达式,或者使用新行作为分隔符。新行可能更容易,但如果您的文件可能包含任何内容,正则表达式将为您提供更大的灵活性。
-
看看这个answer
标签: c# string list parsing substring