当字符!=“_”时获取最后一个字符

问题描述 投票:0回答:7

我有类似的绳子

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

c# asp.net string
7个回答
3
投票

正则表达式应该可以很好地解决这个问题。类似于

@"_(\d+)\."

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

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());

1
投票

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

JS

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

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


1
投票

您可以使用

System.IO.Path
获取不带扩展名的文件名。您需要手动从该文件名中解析所需的片段。如果文件夹名称之一中有“_”,则使用框架通过整个路径的直接正则表达式来完成这么多工作,会稍微减少出错的可能性。


0
投票

使用

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


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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.