只从字符串中获取整数值

本文关键字:整数 获取 字符串 | 更新日期: 2023-09-27 18:07:37

我只需要从字符串中获取最后一个数字。字符串包含字符串+整数+字符串+整数的模式,即。"GS190PA47"。我只需要从字符串中得到47。

谢谢

只从字符串中获取整数值

链接到字符串末尾的一个简单正则表达式,用于任意数量的整数

string test = "GS190PA47";
Regex r = new Regex(@"'d+$");
var m = r.Match(test);
if(m.Success == false)
    Console.WriteLine("Ending digits not found");
else
    Console.WriteLine(m.ToString());
string input = "GS190PA47";
var x = Int32.Parse(Regex.Matches(input, @"'d+").Cast<Match>().Last().Value);

如果字符串总是以数字结尾,你可以简单地使用'd+$模式,正如Steve建议的。

你可以试试这个regex:

(' d +) (? ! . * ' d)

你可以使用这个在线工具进行测试:link

试试这个:

string input = "GS190PA47";
Regex r = new Regex(@"'d+'D+('d+)");
int number = int.Parse(r.Match(input).Groups[1].Value);

模式意味着我们找到一组数字(190),下一组非数字字符(PA),最后寻找的数字。

不要忘记使用system . text . regulareexpressions指令。

不确定这是否比RegEx (Profile it)更有效

 string input = "GS190PA47";
 var x = Int32.Parse(new string(input.Where(Char.IsDigit).ToArray()));

编辑:

令人惊讶的是,它实际上比regex

快得多
var a = Stopwatch.StartNew();
        for (int i = 0; i < 10000; i++)
        {
            string input = "GS190PA47";
            var x = Int32.Parse(new string(input.Reverse().TakeWhile(Char.IsDigit).Reverse().ToArray()));
        }
        a.Stop();
        var b = a.ElapsedMilliseconds;
        Console.WriteLine(b);
        a = Stopwatch.StartNew();
        for (int i = 0; i < 10000; i++)
        {
            string input = "GS190PA47";
            var x = Int32.Parse(Regex.Matches(input, @"'d+").Cast<Match>().Last().Value);
        }
        a.Stop();
         b = a.ElapsedMilliseconds;
        Console.WriteLine(b);