c# - 从没有正则表达式的字符串中获取一组数字
问题描述
"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);
但是没有正则表达式怎么办?
解决方案
我不确定你为什么不想使用正则表达式(我不判断)。但是,假设一切都与您描述的完全一样,并且您不需要验证。一种低技术的方法是只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
推荐阅读
- python - 查找给定的字符串是否在列表中,即使列表只有一些字符 - Python
- python - TypeError:“_PasslibRegistryProxy”对象在网站上不可调用 Passlib/Python 错误
- c# - 当我想在 WPF 中的“DocPanel”的“故事板”中显示“StackPanel”时发生崩溃
- javascript - Learning JS - 你如何从一个键/值对中检索一个值,当该对本身是另一个对的值时,都在一个数组中?
- xml - 零小数和非零小数的 XSLT 1.0 十进制数字格式
- sql - SQL Server查询以检查特定物品是否已被人出售?
- python - 将一个子索引转换为 Pandas 列
- angular - 由于不允许的 MIME 类型(“text/html”)而被阻止:部署在 tomcat 9.0.30 上的 Angular 8 无法提供资产
- c# - 错误 CLassInitialize 签名错误。方法必须是静态的,公开的,不返回值
- java - 如何避免 MVVM 模式中的空响应?