如何获得字符串中最长数字后缀所代表的数字,代码可读,而无需编写编程竞赛风格的算法?
例如
GetNumericalSuffix("Number=350") => 350,
"Num-30" => 30
"My21" => 21
等等
var result = int.Parse(new string(input.Reverse()
.TakeWhile(char.IsDigit)
.Reverse()
.ToArray()));
简单的回答:
var x = "various text 1234";
var digits = x.Reverse().TakeWhile(c => char.IsDigit(c));
var number = new string(digits.Reverse().ToArray());
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);
}
你可以用这样的正则表达式来做到这一点:
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);
}
}
下面的想法,自己编码:
Char.IsDigit(currentChar)
- 开始填充另一个 char 数组 -numericChars
Char.IsDigit() == false
- 从创建字符串numericChars
,然后执行Int32.TryParse()
List<int>
解析的数字中最后你会得到一个所有找到的数字的列表,只要找到最大的一个。