正则表达式获取字符串中的十进制值

时间:2013-12-09 10:00:50

标签: c# regex vb.net

由于我是C#开发人员,我也会接受C#答案。

假设我有这个字符串:“R 560.00”

有一个Alpha字符和一个带小数值的空格。

我们也可以在字符串上加上引号。

但我想要的是只获取字符串中的Decimal值。应删除所有其他字符。

注意:String.Replace无法正常工作,这就是我转向Regex的原因。

这是我尝试过的: fields(amountIdx)将包含R560.00

Dim regex As New Regex("^[0-9]+(\.[0-9]{1,2})?$", RegexOptions.IgnoreCase)
Dim amount As String = regex.Replace(fields(amountIdx), "^[0-9]+(\.[0-9]{1,2})?$")

但金额反映为R 560.00。它不会删除其他字符。 我怎么能做到这一点?

3 个答案:

答案 0 :(得分:4)

您只需使用

即可
Regex.Replace("R500.12", "[^-?\d+\.]", ""))

例如:MsgBox(Regex.Replace("R500.12", "[^-?\d+\.]", ""))

它将返回500.12

答案 1 :(得分:1)

试试这个

var resultArray = Regex.Split(input_string, @"[^0-9\.]+")
.Where(c => c != "." && c.Trim() != "");

其中(c => ...)是用于处理数组的每个元素的lambda,c是数组元素

答案 2 :(得分:1)

这是一个LINQ hack,它取一个字符串中的第一个十进制y正数,其中“decimal-y”由一系列数字和点定义:

string s = "R 560.00";
string decimalyNumber = new String(s.SkipWhile(c => !Char.IsDigit(c) || c != '.')
    .TakeWhile(c => Char.IsDigit(c) || c == '.').ToArray());

它的工作原理是跳过字符直到找到一个数字/点,然后将所有内容都放在连续的数字和点序列中。我认为性能不会那么热,但除非你在短时间内完成了数百万次......


或者,您可以使用Regex并简单地匹配[0-9]*(?:\.[0-9]+)?,这是零个或多个数字,可选地后跟一个点和一个或多个数字(未捕获)。