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

C# 使用正则表达式获取指数值,c#,regex,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。你可以在没有正则表达式的情况下做到这一点,比如: string s = "1.0E-20"; string newStr = s.Substring(s.IndexOf('E') +

我有这样的字符串:

strings s = "1.0E-20"
有没有一种方法可以使用正则表达式从中仅获取-20? 我试过这个:

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

这让我在第5组中得到了e-20,但仍然不仅仅是-20。你可以在没有正则表达式的情况下做到这一点,比如:

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
时添加字符串/数组长度检查,则效果更好

您可以在不使用正则表达式的情况下执行该操作,如:

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
时添加字符串/数组长度检查,则效果更好

string
方法可以创造奇迹时,不需要
Regex

string str = "1.0E-20";
str = str.Substring(str.IndexOf('E') + 1);

string
方法可以创造奇迹时,不需要
Regex

string str = "1.0E-20";
str = str.Substring(str.IndexOf('E') + 1);

使用正则表达式处理文本,使用数学处理数字:

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;

使用正则表达式处理文本,使用数学处理数字:

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-9]+\.[0-9]*)|([1-9]*\.[0-9]+)|([1-9]+))([eE])([-+]?[0-9]+)?

第6组将包含-20以及上面正则表达式的给定示例。请注意括号是如何移动的。不过,我们可能需要您提供更多信息。你有更多的样本数据吗?这里的最终目标是什么?

如果您想使用正则表达式来实现这一目标,您应该切换捕获组

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

第6组将包含-20以及上面正则表达式的给定示例。请注意括号是如何移动的。不过,我们可能需要您提供更多信息。你有更多的样本数据吗?这里的最终目标是什么?

您想要实现什么?为什么要使用正则表达式。。与简单的子字符串解决方案相比,这是不可读的。您试图实现什么?为什么要使用正则表达式。。与简单的子字符串解决方案相比,这是不可读的。@Servy,我正在提取
-20
,然后对其进行解析<代码>s=s子字符串(s.IndexOf('E')+1)@Servy,我正在提取
-20
,然后对其进行解析<代码>s=s子字符串(s.IndexOf('E')+1)快速提问。我怎样才能确保我没有使用这个越界错误?或者获取NaN值?在使用
Math.Log10
之前,您始终可以使用获取初始值
double
。如果其他人需要,可以获取答案:!Double.IsNaN(Math.Log10(Convert.ToDouble(val))快速提问。我怎样才能确保我没有使用这个越界错误?或者获取NaN值?在使用
Math.Log10
之前,您始终可以使用获取初始值
double
。如果其他人需要,可以获取答案:!Double.IsNaN(Math.Log10(Convert.ToDouble(val)))