在角色中获取最后一个角色!=“_”

时间:2012-04-19 18:40:24

标签: c# asp.net string

我有像

这样的字符串
string test = "http://example.com/upload/user/80_747.jpg"
string test2 = "http://example.com/upload/user/80_4747.jpg"

在这两种情况下我都需要“747”或“4747”。是否有任何自动或预制功能,或者我需要完全手动完成。

ASP.NET C#4.0

7 个答案:

答案 0 :(得分:3)

正则表达式应该可以正常工作。类似于@"_(\d+)\."

Regex.Match ("http://example.com/upload/user/80_747.jpg",   @"_(\d+)\.")
    .Groups[1]
    .Captures[0]
    .Value

答案 1 :(得分:2)

int startIndex = test.LastIndexOf('_');
int endIndex = test.LastIndexOf('.');
return test.Substring(startIndex, endIndex - startIndex);

由于您使用的是.net4,如果您的字符串格式如上所述,您可以使用linq执行此操作:

return new string(test.SkipWhile(x=>x!='_').Skip(1).TakeWhile(x=>x!='.').ToArray());

答案 2 :(得分:1)

您可以使用_字符拆分字符串并获取结果数组的最后一个字符串,然后再将其拆分。字符并取结果数组的第一个字符串。

JS中的

test.split('_')[1].split('.')[0];
CS中的

使用String类的SubString和IndexOf方法。

答案 3 :(得分:1)

您可以System.IO.Path使用get the filename without the extension。您需要手动解析该文件名所需的片段。使用框架做这么多,在整个路径的直接正则表达式上,如果其中一个文件夹名称中有一个“_”,则会略微不易出错。

答案 4 :(得分:0)

使用test.LastIndexOf('_')查找_字符的最后一次出现。

答案 5 :(得分:0)

string val = Path.GetFileNameWithoutExtension(test.Substring(test.LastIndexOf('_') + 1));

答案 6 :(得分:0)

test
    .ToCharArray()
    .Reverse()
    .SkipWhile(c =>
    {
        int i;
        return !int.TryParse(c.ToString(), out i);
    })
    .TakeWhile(c => c != '_');

我认为这对你的要求是万无一失的。