C# 扫描字符串中的数字

C# 扫描字符串中的数字,c#,C#,我有一个包含单词和数字的字符串。 如何找到最后一个数字(位数未知)并将其隔离? 到目前为止,我使用了子字符串方法,但是数字在文本中的位置以及数字的长度都是未知的 谢谢 以下是一个简单的解决方案: 或者是一个稍微不同的解决方案,加入一点Linq,以便更好地测量: var number = Regex.Matches(input, @"\d+").Cast<Match>().Last().Value; 您还可以使用更明确的方式: var lastNumberIndex = yourSt

我有一个包含单词和数字的字符串。 如何找到最后一个数字(位数未知)并将其隔离? 到目前为止,我使用了子字符串方法,但是数字在文本中的位置以及数字的长度都是未知的


谢谢

以下是一个简单的解决方案:

或者是一个稍微不同的解决方案,加入一点Linq,以便更好地测量:

var number = Regex.Matches(input, @"\d+").Cast<Match>().Last().Value;

您还可以使用更明确的方式:

var lastNumberIndex = yourString
        .LastIndexOfAny(new[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'});
这应该做到:

var res = Regex.Matches("kadlkfmg 57 dklfmgladg 89 dfdd", @"\d+");
var lastMatch = res.Cast<Match>().LastOrDefault();
if(lastMatch != null)
{
    var nr = lastMatch.Value;
}
var res=Regex.Matches(“kadlkfmg 57 dklfmgladg 89 dfdd”,@“\d+”;
var lastMatch=res.Cast().LastOrDefault();
if(lastMatch!=null)
{
var nr=lastMatch.Value;
}

只需从末尾开始搜索可以找到的第一个整数值。在我看来,这是最有效的方法

最后一位数字:

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;
}

这将获得字符串中的最后一位数字(两个示例):

编辑:

要获取最后一个数字(整数),请执行以下操作:

var mychar3 = new string(testing.Reverse()
                                .SkipWhile(c => !char.IsDigit(c))
                                .TakeWhile(c => char.IsDigit(c))
                                .Reverse().ToArray());

您还可以使用高效字符串方法和可读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()) : "";

我建议你也在这里查一下:@user3057504你能澄清一下吗,你想知道字符串中出现的最后一个数字还是最后一个数字吗?谢谢!我需要整数。
0123456789.ToCharArray()
更好吗?:)你必须在每一个字符上循环遍历整个数组,但没有给出整数“我如何才能找到最后一个数字”@FSou1甚至更高的资源成本+1蒂姆,谷歌数字vs数字请。
s[i]。GetType()
将返回字符。啊,是的,你是对的。已更改为tryparse()。现在已经晚了:)这并没有充分回答OP的问题。由于应该返回的数字是
1234567890
,而不是
0
。我正在遍历字符串中的每个字符,因此第一个字符是“0”。@flol,我误解了OP的问题。我改变了我的投票。对不起!!OP说最后一个“号码”谢谢!第三个正是我需要的!
var mychar3 = new string(testing.Reverse()
                                .SkipWhile(c => !char.IsDigit(c))
                                .TakeWhile(c => char.IsDigit(c))
                                .Reverse().ToArray());
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()) : "";