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

Ada*_*m S 1 c# regex string

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

-2.2,1.1-6.9,2.3-12.8,2.3
Run Code Online (Sandbox Code Playgroud)

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

-2.2
1.1
-6.9
2.3
-12.8
2.3
Run Code Online (Sandbox Code Playgroud)

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

SLa*_*aks 6

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

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

说明

这个正则表达式匹配,或者(?<!^|,)(?=-).

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


Yhr*_*hrn 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();
Run Code Online (Sandbox Code Playgroud)