3

我有类似的字符串

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

4

7 回答 7

3

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

Regex.Match ("http://example.com/upload/user/80_747.jpg",   @"_(\d+)\.")
    .Groups[1]
    .Captures[0]
    .Value
于 2012-04-19T18:42:44.640 回答
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());
于 2012-04-19T18:43:39.833 回答
1

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

在 JS 中

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

在 CS 中使用 String 类的 SubString 和 IndexOf 方法。

于 2012-04-19T18:42:19.540 回答
1

您可以使用System.IO.Path获取不带扩展名的文件名. 您将需要手动从该文件名中解析出您想要的片段。使用框架在整个路径的直接正则表达式上做这么多,如果其中一个文件夹名称中有一个“_”,那么出错的可能性会稍微小一些。

于 2012-04-19T18:44:53.407 回答
0

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

于 2012-04-19T18:42:54.420 回答
0
string val = Path.GetFileNameWithoutExtension(test.Substring(test.LastIndexOf('_') + 1));
于 2012-04-19T18:47:22.157 回答
0
test
    .ToCharArray()
    .Reverse()
    .SkipWhile(c =>
    {
        int i;
        return !int.TryParse(c.ToString(), out i);
    })
    .TakeWhile(c => c != '_');

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

于 2012-04-19T19:09:58.617 回答