我创建了一个以逗号分隔的脚本来存储项目的各种数据。
我的数据行的最后一部分始终是前面数据的摘要(它总是除了换行符之外的任何字符的字符串)。问题是我沿着逗号分割整行,所以如果该行的摘要部分中有逗号,那么多余逗号之后的任何内容也会被拆分,这是我不想要的。
所以我想为逗号创建自己的转义字符。我认为最不容易出错的方法是使用正则表达式。
我已经提出了以下表达式,^,(?!\\,)$
我曾希望找到逗号,但不会转义逗号。不幸的是,它没有用。
以下两行说明了我的数据是如何分开的。
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, @"^,(?!\,)$");
时,没有任何反应,我只得到一个包含整个字符串的元素数组。
答案 0 :(得分:1)
如果你想使用正则表达式,而不是分割字符串我建议通过匹配以下正则表达式捕获字段:
\s*((?:\\.|[^\\])+?)\s*(?:,\s*|$)
演示:http://regex101.com/r/lP8yE1/4
每个匹配都是一个字段,值将是捕获组1的内容。
答案 1 :(得分:1)
您可以使用此模式检查之前是否没有反斜杠:
Regex.Split(line, @"(?<!\\), ");
(?<!...)
是一个外观断言,意味着:不在之前
答案 2 :(得分:1)