0

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

谢谢

4

5 回答 5

4

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

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());
于 2013-04-05T09:20:55.590 回答
1
string input = "GS190PA47";
var x = Int32.Parse(Regex.Matches(input, @"\d+").Cast<Match>().Last().Value);

如果字符串总是以数字结尾,您可以\d+$像史蒂夫建议的那样简单地使用模式。

于 2013-04-05T09:20:26.853 回答
0

你可以试试这个正则表达式:

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

您可以使用此在线工具对其进行测试:link

于 2013-04-05T09:19:12.227 回答
0

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

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

编辑:

令人惊讶的是它实际上比正则表达式快得多

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);
于 2013-04-05T09:36:01.493 回答
0

试试这个:

string input = "GS190PA47";

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

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

不要忘记包含使用 System.Text.RegularExpressions 指令。

于 2013-04-05T09:46:09.673 回答