我想提取输入字符串的十进制值
"Total (pre tax) 93.78 EUR"
我试过
Regex.Replace(string input, "[^0-9]+", string.Empty)
但它只提取“9370”,预期结果为“97.30”。
请帮我模式获取小数值。
答案 0 :(得分:4)
我建议匹配而不是替换:让提取感兴趣的值,而不是删除所有其他人物。
string result = Regex.Match(
"Total (pre tax) 93.78 EUR",
@"[0-9]+(\.[0-9]+)?")
.Value;
答案 1 :(得分:2)
您目前正在替换不是数字的所有内容 - 包括.
。
我建议您使用可选的“点后跟更多数字”来捕获数字组。这样你就可以从文本中捕获多个值 - 或者如果你需要,可以根据你拥有的任何标准拒绝它。这是一个例子:
using System;
using System.Text.RegularExpressions;
class Program
{
public static void Main()
{
string text = "I start with 5 and take away 2.52 to get 2.48 as a result";
Regex regex = new Regex(@"\d+(\.\d+)?");
var matches = regex.Matches(text);
foreach (Match match in matches)
{
Console.WriteLine(match.Value);
}
}
}
输出:
5
2.52
2.48
您可以使用MatchCollection.Count
来确定有多少匹配 - 我们不知道您的上下文,但您可能希望采取不同的操作,具体取决于是否没有匹配,只有一个匹配或更多比一场比赛。
答案 2 :(得分:1)
如果您将'.'
添加到您希望保留的字符列表,即[^0-9.]
,则可以将您的方法用作快速黑客。但是,这不够强大,因为它会保留其他数字,例如
Total (inclusive of 20% VAT) 93.78 EUR
会产生2093.78
,这不是你想要的。
更好的方法是使用特定于价格的正则表达式,例如
@"(\d+[.,]\d\d) EUR"
将匹配带有两位小数的数字,后面跟EUR
。
答案 3 :(得分:0)
对于整数或浮点数:
SVML
仅适用于花车:
string result = Regex.Match(input,@"[0-9]+(\.[0-9]+)?").Value;
答案 4 :(得分:0)
Regex.Split()
将从输入字符串中提取所有浮动值并将其存储到string[]
,就像string.Split
函数
你可以试试这个:
string stringInput = "Total (pre tax) 93.78 EUR";
string[] splitValue = Regex.Split (stringInput , @"[^0-9\.]+");
foreach(string item in splitValue)
{
//Here you can convert it to decimal
Console.WriteLine(item);
}
输出:
93.78
答案 5 :(得分:0)
string input = "Java JDK 12.0.1";
var result = Regex.Matches(input, @"[0-9]+(\.[0-9]\.[0-9]+)?");
结果:12.0.1