我有一个包含单词和数字的字符串。 如何找到最后一个数字(位数未知)并将其隔离? 直到现在我使用了Substring方法,但是文本中数字的位置以及数字的长度都是未知的。
谢谢!
答案 0 :(得分:7)
这是使用regular expressions的简单解决方案:
var number = Regex.Match(input, @"(.*\D|^)(\d+)").Groups[2].Value;
或稍微不同的解决方案,一点点Linq投入了很好的措施:
var number = Regex.Matches(input, @"\d+").Cast<Match>().Last().Value;
这是一个使用普通旧for
循环的解决方案;不需要Linq或正则表达式:
int start = 0, end = 0;
for (var i = input.Length - 1; i >= 0; i--) {
if (char.IsDigit(input[i]))
{
end = i + 1;
while (i >= 0 && char.IsDigit(input[i])) i--;
start = i + 1;
break;
}
}
var number = input.Substring(start, end - start);
答案 1 :(得分:1)
您还可以使用更明确的方式:
var lastNumberIndex = yourString
.LastIndexOfAny(new[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'});
答案 2 :(得分:1)
这应该这样做:
var res = Regex.Matches("kadlkfmg 57 dklfmgladg 89 dfdd", @"\d+");
var lastMatch = res.Cast<Match>().LastOrDefault();
if(lastMatch != null)
{
var nr = lastMatch.Value;
}
答案 3 :(得分:1)
只需从结尾开始,然后搜索您可以找到的第一个整数值。在我看来,这是最有效的方法。
最后一位数字:
string s = "randomstringwithnumbers1234567890";
for (int i = s.Length() - 1; i >= 0; i--)
{
if (int.tryParse(s[i], out n) //or use if (char.IsDigit(s[i]))
return s[i];
}
最后一个号码:
string s = "randomstringwithnumbers1234567890";
string b = "";
for (int i = s.Length() - 1; i >= 0; i--) //or use if (char.IsDigit(s[i]))
{
if (int.tryParse(s[i], out n)
b =+ s[i];
else if (b.Length() != 0)
return b;
}
答案 4 :(得分:1)
这将获得字符串中的最后一位数字(两个示例):
string testing = "SomeTextWith3Various45Numbers345InIt";
var mychar = testing.Reverse().First(c => char.IsDigit(c));
var mychar2 = testing.Last(c => char.IsDigit(c));
编辑:
要获得最后一个数字(整数),我们会这样做:
var mychar3 = new string(testing.Reverse()
.SkipWhile(c => !char.IsDigit(c))
.TakeWhile(c => char.IsDigit(c))
.Reverse().ToArray());
答案 5 :(得分:1)
您还可以使用高效字符串方法和可读LINQ的组合:
string text = "Foo 1234 Test Bah344 ....";
int index = text.LastIndexOfAny("0123456789".ToCharArray());
if(index >= 0)
{
string until = text.Substring(0, index + 1);
var digits = until.Reverse().TakeWhile(char.IsDigit).Reverse();
string lastNumber = new string(digits.ToArray()); // 344
}
这是一个不太有效的一半半班轮:
var lastDigits = text.Reverse()
.SkipWhile(c => !char.IsDigit(c))
.TakeWhile(char.IsDigit).Reverse();
string lastNumber = lastDigits.Any() ? new string(lastDigits.ToArray()) : "";