帮助解析字符串(可能使用正则表达式)

时间:2011-02-25 15:26:21

标签: c# regex string

我有一个看起来像这样的字符串:

-2.2,1.1-6.9,2.3-12.8,2.3

我想写一个函数ParseString(),它会返回带有这些元素的双精度列表:

-2.2
1.1
-6.9
2.3
-12.8
2.3

我遇到的问题是减号的作用类似于分隔符,但也具有语义含义(表示负数)。我对正则表达式缺乏经验,我坚持这个。任何专家可以帮我解决这个问题吗?我是用C#写的。

3 个答案:

答案 0 :(得分:6)

您可以拆分正则表达式,|(?<!^|,)(?=-) 经过测试的例子:

var splitter = new Regex(@",|(?<!^|,)(?=-)");
var numbers = splitter.Split(@"-2.2,1.1-6.9,2.3,-12.8,2.3")
                      .Select(Double.Parse);

说明

此正则表达式与,(?<!^|,)(?=-)匹配。

(?!^)(?=-)是一对零宽度断言,在-之前匹配,不在字符串的开头或逗号之后。
(?<!^|,)是一个负面的lookbehind,阻止它在字符串或逗号开头后匹配。如果没有这种否定,它将返回额外的空字符串 (?=-)是一个积极的先行,迫使它在-之前匹配。

答案 1 :(得分:5)

一个简单的解决方案(不是最有效的)是首先用“, - ”替换“ - ”,然后拆分“,”,最后解析部分。像这样:

string numStr = "-2.2,1.1-6.9,2.3-12.8,2.3";
string[] splitNumStr = numStr.Replace("-", ",-").Split(',');
List<double> nums = splitNumStr.Select(s => double.Parse(s)).ToList();

答案 2 :(得分:0)

此正则表达式适用于我:(-*\d*\.\d*)|(-\d*\.\d*-\d*\.\d*)