【发布时间】:2014-08-06 14:35:26
【问题描述】:
我正在创建一个逗号分隔的脚本来存储项目的各种数据。
我的数据行的最后一部分始终是前面数据的摘要(它始终是除换行符之外的任何字符的字符串)。问题是我沿着逗号分割了整行,所以如果该行的摘要部分中有逗号,多余的逗号之后的任何内容也会被分割,这是我不想要的。
所以我想为逗号制作自己的转义字符。我认为最不容易出错的方法是使用正则表达式。
我想出了下面的表达式,^,(?!\\,)$,我希望它会查找逗号,而不是转义的逗号。不幸的是,它不起作用。
以下两行说明了我的数据是如何分离的。
01, 0, 80.0, 0x00100204, 0x00000000, 0x00000800, 0xFFFFF800, 0.02, 0.5, Channel 01: Voltage Offset\,\,\,comma
02, 0, 80.0, 0x00100208, 0x00000000, 0x00000800, 0xFFFFF800, 0.02, 0.5, Channel 02: Voltage Offset
请注意,在第一行数据中,我有多余的逗号,用\,\,\,comma表示
但是当我调用Regex.Split(line, @"^,(?!\,)$"); 时,什么都没有发生,我只是得到一个包含我的整个字符串的单个元素数组。
【问题讨论】:
-
为什么不使用 csv 解析器库呢?
-
仅供参考
^$是 anchors 匹配字符串的开头和结尾 -
@Selman22 我的脚本不是纯 CSV 文件;它有许多关键字和其他帮助分隔数据部分的东西
-
由于结构是相同的,直到最后一部分,我将探索使用捕获组来捕获到两个组。然后你对每个部分做你需要做的事情。