如何从字符串中获取数字后缀?

时间:2013-06-26 08:44:56

标签: c# string

如何通过可读代码获取字符串中最长数字后缀所代表的数字,而无需编写编程风格算法?

e.g。

GetNumericalSuffix("Number=350") => 350, 
"Num-30" => 30
"My21" => 21

5 个答案:

答案 0 :(得分:6)

var result = int.Parse(new string(input.Reverse()
                                       .TakeWhile(char.IsDigit)
                                       .Reverse()
                                       .ToArray()));

答案 1 :(得分:3)

public static int GetNumericalSuffix(string str)
{
    Match match = Regex.Match(str, "[^0-9]*([0-9]+)$");
    if (!match.Success)
        return -1;
    return int.Parse(match.Groups[1].Value);
}

答案 2 :(得分:2)

简单回答:

var x = "various text 1234";
var digits = x.Reverse().TakeWhile(c => char.IsDigit(c));
var number = new string(digits.Reverse().ToArray());

答案 3 :(得分:0)

下面的想法,自己编写代码:

  1. 将字符串读取为char数组,将char读取为char
  2. 如果Char.IsDigit(currentChar) - 开始填写其他字符数组 - numericChars
  3. Char.IsDigit() == false - 从numericChars创建字符串时,请执行Int32.TryParse()
  4. 以[{1}}已解析数字
  5. 存储号码

    最后,您最终找到所有找到的数字的列表,只找到最大的数字。

答案 4 :(得分:0)

您可以使用正则表达式执行此操作:

MatchCollection m = Regex.Matches("Number=350", "\\d+");
int biggestMatch = 0;
foreach (Match match in m)
{
   if (int.Parse(match.Value) > biggestMatch)
   {
      biggestMatch = int.Parse(match.Value);
   }
}