首页 > 解决方案 > 从没有正则表达式的字符串中获取一组数字

问题描述

"abc_d1.txt" should get 0
"abc_d1_2.txt" should get 2
"abc_d1_14.txt" should get 14
"abc_d12_x2_156.txt" should get 156

目前可以用正则表达式做到这一点

 int Id;
 string pattern = @"(?<=_)\d+(?=\.\w+)|(?<!_\d+)(?=\.\w+)";
 Regex rg = new Regex(pattern);
 var z = rg.Match(fullFileName).Value;
 Id = z == "" ? 0 : Convert.ToInt32(z);

但是没有正则表达式怎么办?

标签: c#stringsubstring

解决方案


我不确定你为什么不想使用正则表达式(我不判断)。但是,假设一切都与您描述的完全一样,并且您不需要验证。一种低技术的方法是只Split处理字符串、TryParse结果,然后调用LastOrDefault

给定

private static int GetNumber(string input)
  => input.Split('_','.')
      .Select(x => int.TryParse(x, out var value) ? value : (int?)null)
      .LastOrDefault(x => x != null) ?? 0;

用法

var asd = new List<string>()
{
   "abc_d1.txt",
   "abc_d1_2.txt",
   "abc_d1_14.txt",
   "abc_d12_x2_156.txt"
};

foreach (var result in asd.Select(GetNumber))
   Console.WriteLine(result);

输出

0
2
14
156

推荐阅读