使用正则表达式获取指数值

时间:2013-12-03 21:03:49

标签: c# regex

我有这样的字符串:

strings s = "1.0E-20"

使用正则表达式有没有办法从这里获得-20? 我试过这个:

(([1-9]+\.[0-9]*)|([1-9]*\.[0-9]+)|([1-9]+))([eE][-+]?[0-9]+)? 

这让我在第5组获得了e-20,但仍然不仅仅是-20。

5 个答案:

答案 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。请注意括号如何移动。我们可能需要您提供更多信息。你还有更多的样本数据吗?这里的最终目标是什么?