获取字符 != “_” 时的最后一个字符
本文关键字:字符 最后一个 获取 | 更新日期: 2023-09-27 18:31:36
我有像这样的字符串
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
正则表达式应该可以正常工作。像@"_('d+)'."
.
Regex.Match ("http://example.com/upload/user/80_747.jpg", @"_('d+)'.")
.Groups[1]
.Captures[0]
.Value
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());
您可以使用 _ 字符拆分字符串并获取结果数组的最后一个字符串,然后再次使用 . 字符并获取结果数组的第一个字符串。
在 JS 中
test.split('_')[1].split('.')[0];
在CS中使用String类的SubString和IndexOf方法。
您可以使用 System.IO.Path
来获取不带扩展名的文件名。 您需要手动从该文件名中解析所需的片段。 使用框架来做这么多,在整个路径的直接正则表达式上,如果其中一个文件夹名称中有"_",那么容易出错的情况会稍微小一些。
使用 test.LastIndexOf('_')
查找 _ 字符的最后一次出现。
string val = Path.GetFileNameWithoutExtension(test.Substring(test.LastIndexOf('_') + 1));
test
.ToCharArray()
.Reverse()
.SkipWhile(c =>
{
int i;
return !int.TryParse(c.ToString(), out i);
})
.TakeWhile(c => c != '_');
我认为它对您的要求是万无一失的。