Extract number at end of string in C#

.net, c#, parsing, regex

Solution

Use this regular expression:

\d+$

// RegexOptions.RightToLeft – is optional, but will increase performance
var result = Regex.Match(input, @"\d+$", RegexOptions.RightToLeft).Value;

or one-liner without regex:

var result = input[^input.Reverse().TakeWhile(char.IsDigit).Count()..];

or more efficient way:

int numberOfDigitsAtEnd = 0;
for (var i = input.Length - 1; i >= 0; i--)
{
    if (!char.IsDigit(input[i]))
    {
        break;
    }

    numberOfDigitsAtEnd++;
}
        
var result = input[^numberOfDigitsAtEnd..];

Problem

Probably over analysing this a little bit but how would stackoverflow suggest is the best way to return an integer that is contained at the end of a string. Thus far I have considered using a simple loop, LINQ and regex but I'm curious what approaches I'll get from the community. Obviously this isn't a hard problem to solve but could have allot of variance in the solutions. So to be more specific, how would you create a function to return an arbitrarily long integer/long that is appended at the end of an arbitrarily long string? ``` CPR123 => 123 ABCDEF123456 => 123456 ```

Original source