我只需要从字符串中获取最后一个数字。该字符串包含字符串+整数+字符串+整数的模式,即“GS190PA47”。我需要从字符串中获得47个。
谢谢
答案 0 :(得分: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());
答案 1 :(得分:1)
string input = "GS190PA47";
var x = Int32.Parse(Regex.Matches(input, @"\d+").Cast<Match>().Last().Value);
如果字符串总是以数字结尾,你可以简单地使用\d+$
模式,正如史蒂夫建议的那样。
答案 2 :(得分:0)
答案 3 :(得分: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);
答案 4 :(得分: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指令。