我有这样的字符串:
strings s = "1.0E-20"
使用正则表达式有没有办法从这里获得-20? 我试过这个:
(([1-9]+\.[0-9]*)|([1-9]*\.[0-9]+)|([1-9]+))([eE][-+]?[0-9]+)?
这让我在第5组获得了e-20,但仍然不仅仅是-20。
答案 0 :(得分:3)
使用Regex处理文本,使用Math来处理数字:
Math.Log10(Convert.ToDouble("1.0E-20")) // returns -20
要确保您的字符串输入是有效的double
使用TryParse
:
double d, result = 0.0;
if (Double.TryParse("1.0E-20", out d))
{
result = Math.Log10(d);
}
else
{
// handle error
}
此外,如果您想从输入中获得1.0
(乘数):
var d = Convert.ToDouble("1.0E-20");
var exponent = Math.Log10(d);
var multiplier = d / exponent;
答案 1 :(得分:1)
你可以这样做没有正则表达式,如:
string s = "1.0E-20";
string newStr = s.Substring(s.IndexOf('E') + 1);
稍后您可以将字符串解析为数字:
int number;
if (!int.TryParse(newStr, out number))
{
//invalid number
}
Console.WriteLine(number);
您也可以使用string.Split
之类的:
string numberString = s.Split('E')[1]; //gives "-20"
如果在访问string.Substring
时添加字符串/数组长度检查或在分割后访问元素1
,则更好。
答案 2 :(得分:1)
当Regex
方法可以创造奇迹时,string
无需
string str = "1.0E-20";
str = str.Substring(str.IndexOf('E') + 1);
答案 3 :(得分:0)
var x = str.IndexOf("E") != -1 ? str.Substring(str.IndexOf("E") + 1) : "1";
答案 4 :(得分:0)
如果要使用正则表达式来实现此目的,则应该切换捕获组。
(([1-9]+\.[0-9]*)|([1-9]*\.[0-9]+)|([1-9]+))([eE])([-+]?[0-9]+)?
第6组将包含带有上述正则表达式的给定示例的-20。请注意括号如何移动。我们可能需要您提供更多信息。你还有更多的样本数据吗?这里的最终目标是什么?