Max*_*ich 26 .net c# regex parsing
可能过度分析了一下,但stackoverflow建议如何返回包含在字符串末尾的整数的最佳方法.
到目前为止,我已经考虑使用一个简单的循环,LINQ和正则表达式,但我很好奇我将从社区获得什么方法.显然,这不是一个难以解决的问题,但在解决方案中可能存在各种差异.
所以更具体一点,你如何创建一个函数来返回一个任意长整数/长,并附加在任意长字符串的末尾?
CPR123 => 123
ABCDEF123456 => 123456
Run Code Online (Sandbox Code Playgroud)
Kir*_*huk 41
使用此正则表达式:
\d+$
var result = Regex.Match(input, @"\d+$").Value;
Run Code Online (Sandbox Code Playgroud)
或使用Stack,可能更有效:
var stack = new Stack<char>();
for (var i = input.Length - 1; i >= 0; i--)
{
if (!char.IsNumber(input[i]))
{
break;
}
stack.Push(input[i]);
}
var result = new string(stack.ToArray());
Run Code Online (Sandbox Code Playgroud)
小智 18
强制性LINQ单线程
var input = "ABCD1234";
var result = string.Concat(input.ToArray().Reverse().TakeWhile(char.IsNumber).Reverse());
Run Code Online (Sandbox Code Playgroud)
Regex 模式\d+$有点昂贵,因为默认情况下,字符串是从左到右解析的。一旦正则表达式引擎找到1in 12abc34,它就会继续匹配2,当遇到 时a,匹配失败,尝试下一个位置,依此类推。
但是,在 .NET 正则表达式中,有一个RegexOptions.RightToLeft修饰符。它使正则表达式引擎从右到左解析字符串,您可能会更快地获得已知更接近结尾的匹配项。
var result = Regex.Match("000AB22CD1234", @"\d+$", RegexOptions.RightToLeft);
if (result.Success)
{
Console.Write(result.Value);
} // => 1234
Run Code Online (Sandbox Code Playgroud)
请参阅在线 C# 演示。