我需要从以下字符串中提取值33345.002
:
"ABC(MAX)(33345.002)"
如何在C#中执行此操作?
我尝试在SQL中处理它但是也接受了(MAX)所以现在我要尝试C#。 谢谢 。 。
这是迄今为止最接近的:
string temp = "YYY(33345.002)(gg)YYYY";
temp = Regex.Replace(temp, "[^.0-9]", "");
double num;
bool success = Double.TryParse(temp, out num);
if (success)
{
//do what ever to the number}
但是有一个问题,有些数字在它们前面有零。像:00033.33
答案 0 :(得分:3)
这非常简单。 在C#中将要绘制[0-9] /“0123456789”的字符声明为常量 循环遍历字符串,例如:
public bool TryParseDouble(string input, out double value){
if(string.IsNullorWhiteSpace(input)) return false;
const string Numbers = "0123456789.";
var numberBuilder = new StringBuilder();
foreach(char c in input) {
if(Numbers.IndexOf(c) > -1)
numberBuilder.Append(c);
}
return double.TryParse(numberBuilder.ToString(), out value);
}
Ofcoarse可以增强(也许只是解析出第一个数字,或者返回一个解析所有数字的双精度数组) - 更不用说它会解析出多个小数,这并不是你想要的。
同样的技术也可以在T-SQL中使用,并在字符串上循环,然后使用'in'声明有效值。
编辑:第二个想法 Regex.Match(输入,@“\ d +(。\ d +)?”) 将从字符串中提取双/小数然后你可以使用double.Parse如果找到匹配:)。编辑2:顺便说一句愚蠢的理由'\。'被转义为'。'在Stack Overflow上。请注意,正则表达式中的小数被转义(只是。匹配任何东西) 快乐的编码!
答案 1 :(得分:0)
对于此SO J-16 SDiZ
,您需要^
作为首要答案提供的相同正则表达式(包括所提及的增强功能),但开头没有$
且{{ 1}}在最后。
下次可能值得在SO或Google上搜索一下:)