"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
到目前为止,这是我所做的,但是没有得到正确的结果。
string y = "tester_yg1.txt";
string pattern = @"(\d+)(?!.*\d)";
Regex rg = new Regex(pattern);
var z = rg.Match(fullFileName).Value;
Console.WriteLine($"z is {z}");
您可以使用此正则表达式:
@"(?<=_)\d+(?=\.\w+)|(?<!_\d+)(?=\.\w+)"
说明:
(?<=_)
寻找下划线
\d+
匹配一个或多个数字
(?=\.\w+)
向前看一个点,后面再加上一个单词字符(扩展名)
|
要么
(?<!_\d+)
后面不要有下划线或一个或多个数字
(?=\.\w+)
向前看一个点,后面再加上一个单词字符(扩展名)
没有数字时,最后一部分将返回空匹配项。
然后,您必须将空匹配项转换为0
in代码。
更新:
要删除该号码,您可以使用this Regex
,现在调用Replace
:
string pattern1 = @"_\d+(?=\.\w+)|(?<!_\d+)(?=\.\w+)";
Regex rg1 = new Regex(pattern1);
var z = rg1.Replace(y, "");
string z1 = Path.GetFilename(z);
现在,z1应该包含已删除数字和扩展名的文件名。如果没有数字,它将返回不带扩展名的文件名。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句