我想从远程服务收到的字符串中获取一些十进制数字。
我的问题是我只想在前缀为“+”或“ - ”的字符串中使用小数。
这是我目前的解决方案:
string text = "+123.23 foo 456.34 bar -789.56";
List<string> decimals = Regex.Split(text, @"[^0-9\.]+").Where(
c => c != "." && c.Trim() != string.Empty).ToList();
foreach (var str in decimals)
{
Console.WriteLine(str);
}
// Output:
//
// 123.23
// 456.34
// 789.56
//
// Desired output:
//
// 123.23
// -789.56
由于我不熟悉正则表达式,我希望得到一些更合适的模式的帮助。
答案 0 :(得分:2)
我从Split
非数字切换到Match
数字。这会得到你想要的结果:
string text = "+123.23 foo 456.34 bar -789.56";
List<string> decimals = Regex.Matches(text, @"[+\-][0-9]+(\.[0-9]+)?")
.Cast<Match>().Select(m => m.Value).ToList();
foreach (var str in decimals)
{
Console.WriteLine(decimal.Parse(str));
}
答案 1 :(得分:2)
尝试(\+|\-)[0-9\.]+
string strRegex = @"(\+|\-)[0-9\.]+";
Regex myRegex = new Regex(strRegex);
string strTargetString = @"+123.23 foo 456.34 bar -789.56";
foreach (Match myMatch in myRegex.Matches(strTargetString))
{
if (myMatch.Success)
{
}
}