从C#中的字符串中提取十进制数[重复]
Posted
技术标签:
【中文标题】从C#中的字符串中提取十进制数[重复]【英文标题】:Extract decimal Number from string in C# [duplicate] 【发布时间】:2017-11-16 02:43:26 【问题描述】:我正在尝试使用以下代码从我的字符串中提取数字:
var mat = Regex.Match(stringValue, @"\d+").Value;
但是当stringValue
包含像“($23.01)”这样的小数时,它只提取 23 而不是 23.01。如何获得decimal
值 23.01?
【问题讨论】:
【参考方案1】:尝试以这种方式解决问题。十进制数具有以下特点:
以一位或多位数字开头 (\d+
)
之后,可以有 1 个或 0 个点 (\.?
)
如果存在点,则还应跟随一个或多个数字 (\d+
)
由于最后两个特征有点相关,我们可以将它放在一个组中并添加一个?
量词:(\.\d+)?
。
所以现在我们有了整个正则表达式:\d+(\.\d+)?
如果你想匹配像.01
这样的十进制数字(前面没有0),你可以只使用|
来表示“或”并添加另一个大小写(\.\d+)
。基本上:(\d+(\.\d+)?)|(\.\d+)
【讨论】:
10.
或 .01
不是有效的十进制数字?
@xunatai 不,我不认为它们是十进制数
@xunatai 10.
无论如何都会匹配 10
。你只需要在开始时做\d*
而不是\d+
来匹配.01
@xunatai 哎呀!那是我的快速思考。 (\d+(\.\d+)?)|(\.\d+)
应该可以工作。
@Sweeper 如果字符串包含 "($23)" 并且没有十进制值,它会起作用吗?【参考方案2】:
你试过this Example:
string inputStr = "($23.01)";
Console.WriteLine(Regex.Match(inputStr, @"\d+.+\d").Value);
或者你可以试试这个 LinqSolution:
Console.WriteLine(String.Concat(inputStr.Where(x=> x=='.'||Char.IsDigit(x))));
【讨论】:
当字符串包含“($23)”时,会失败 @HumaAli:Regex
会因输入而失败,然后您可以尝试 Linq 解决方案
在最后加一个问号:\d+.+\d?【参考方案3】:
试试这个
var mat= Regex.Split(stringValue, @"[^0-9.]+") .Where(c => c != "." && c.Trim() != "");
【讨论】:
以上是关于从C#中的字符串中提取十进制数[重复]的主要内容,如果未能解决你的问题,请参考以下文章