Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式以获取字符串中的十进制值_C#_Regex_Vb.net - Fatal编程技术网

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

C# 正则表达式以获取字符串中的十进制值,c#,regex,vb.net,C#,Regex,Vb.net,由于我是一名C#开发者,我也会接受C#的答案 假设我有这个字符串:“R560.00” 有一个字母字符和一个带十进制值的空格 我们还可以在字符串上加上引号 但我想要的是,只获取字符串中的十进制值。应删除所有其他字符 注意:String.Replace不能按我所希望的那样工作,这就是为什么我使用Regex 这就是我尝试过的: 字段(AMOUNTDX)将包含R560.00 Dim regex As New Regex("^[0-9]+(\.[0-9]{1,2})?$", RegexOptions.Ig

由于我是一名C#开发者,我也会接受C#的答案

假设我有这个字符串:“R560.00”

有一个字母字符和一个带十进制值的空格

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

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

注意:String.Replace不能按我所希望的那样工作,这就是为什么我使用Regex

这就是我尝试过的: 字段(AMOUNTDX)将包含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})?$")
但该金额反映为560.00南非兰特。它不会删除其他字符。 我怎样才能做到这一点呢?

试试这个

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

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

这里有一个LINQ hack来获取字符串中的第一个十进制y正数,其中“十进制y”由一系列数字和点定义:

string s = "R 560.00";
string decimalyNumber = new String(s.SkipWhile(c => !Char.IsDigit(c) || c != '.')
    .TakeWhile(c => Char.IsDigit(c) || c == '.').ToArray());
它的工作原理是跳过字符,直到找到一个数字/点,然后在连续的数字和点序列中获取所有内容。我想演出不会那么火爆,但除非你在短时间内有上百万的节目要做


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

您可以简单地使用

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


它将返回500.12

小数点是多少?您是否接受只发出小数点和数字的正则表达式?显然,R56.0.00将通过;你想这样吗?为什么要用“
替换”
而不仅仅是“
匹配”
?乔恩说了什么,并从正则表达式的开头(如果你不希望小数点是字符串中的最后一个东西,那么从结尾)删除“^”,你用“的”替换了吗?是的,“输入字符串”中的金额is:R 560.00我只希望金额变量为560.00。就这样。没有R或任何其他字符。我特别说的是正则表达式。你看到VB的LINQ版本了吗?这是一些非常令人困惑的东西。我会将您的答案标记为正确,只需将正则表达式更改为:\d+\。?\d*我可以知道您期望的答案是什么吗?是“R”还是“500.12”。如果是“R”,则\d+\.?\d*将起作用,而对于“500.12”[^-?\d+\.],这将起作用。[0-9]*(?:\[0-9]+)?不起作用。但是\d+\.?\d*可以