我有一个具有以下格式的特定模式
string exp = "$(2.1)+$(3.2)-tan($(23.2)) * 0.5";
使用此代码我得到以下结果
var doubleArray = Regex
.Split(str, @"[^0-9\.]+")
.Where(c => c != "." && c.Trim() != "")
.ToList();
//result
[2.1,3.2,23.2,0.5]
我想从$()
分割数字。即预期结果是
[2.1,3.2,23.2]
我怎样才能做到这一点?
答案 0 :(得分:9)
我建议提取Matches
而不是Split
:
string exp = "$(2.1)+$(3.2)-tan($(23.2)) * 0.5";
var doubleArray = Regex
.Matches(exp, @"\$\((?<item>[0-9.]+)\)")
.OfType<Match>()
.Select(match => match.Groups["item"].Value)
.ToList();
Console.WriteLine(string.Join("; ", doubleArray));
结果:
2.1; 3.2; 23.2
答案 1 :(得分:1)
与Dmitry的答案类似,但不是使用零宽度后面的子组:
string str = "$(2.1)+$(3.2)-tan($(23.2)) * 0.5";
var doubleArray =
Regex
.Matches(str, @"(?<=\$\()[0-9\.]+")
.Cast<Match>()
.Select(m => Convert.ToDouble(m.Value))
.ToList();
foreach (var d in doubleArray)
{
Console.WriteLine(d);
}