使用C#中的IndexOf提取字符串

4

我正在尝试提取文件名中的数字部分。"Name, lastname_123456_state_city.pdf"

我已经做到了这一步...

idstring = file.Substring(file.IndexOf("_") + 1, 
    (file.LastIndexOf("_") - file.IndexOf("_") - 1));

1
数字总会在第一个破折号后面吗?您可以在 "_" 上使用 Split,然后获取数组的第一个元素。 - Sparky
4个回答

6

在这种情况下,正则表达式可能更好:

_(\d+)_

并且,以下是如何使用它的方法。
    string input = "Name, lastname_123456_state_city.pdf";
    string regexPattern = @"_(\d+)_";

Match match = Regex.Match(input, regexPattern, RegexOptions.IgnoreCase);

if (match.Success)
    string yourNumber = match.Groups[1].Value;

2
var firstUnderscore = file.IndexOf("_");
var nextUnderscore = file.IndexOf("_", firstUnderscore + 1);
var idstring = file.Substring(firstUnderscore + 1, nextUnderscore - firstUnderscore - 1);

谢谢,我希望我能选择两个答案! - Allan Jason

0
你可以使用 System.Text.RegularExpressions.Regex
var regex = new Regex(@"^.*_(?<number>\d+)_.*\.pdf");
var idstring=regex.Match(file).Groups["number"].Value;

0
为什么不直接使用正则表达式?测试@"_([0-9]*)_"就能解决问题了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接