我在数据库中存储了一些文件,其文件名类似于1839341255115211butterflies.jpg。我需要将此文件名显示为butterflies.jpg。我需要删除前 16 位数字,然后显示文件名。添加到它我也有几个文件名在文件名之前没有这个 16 位添加。现在我的问题是我如何识别这个字符串在文件名之前是否有 16 位数值,基于它删除第一个 16 位并只显示文件名。我知道如何删除前 16 位并检索文件名,但需要有关如何识别具有 16 位的字符串的帮助。
任何建议都非常感谢。
我在数据库中存储了一些文件,其文件名类似于1839341255115211butterflies.jpg。我需要将此文件名显示为butterflies.jpg。我需要删除前 16 位数字,然后显示文件名。添加到它我也有几个文件名在文件名之前没有这个 16 位添加。现在我的问题是我如何识别这个字符串在文件名之前是否有 16 位数值,基于它删除第一个 16 位并只显示文件名。我知道如何删除前 16 位并检索文件名,但需要有关如何识别具有 16 位的字符串的帮助。
任何建议都非常感谢。
正则表达式在这里看起来很合适:
^[0-9]{16}
以上将匹配以 16 位数字(0 到 9)开头的字符串。
用法:
if(Regex.Match(fileName, @"^[0-9]{16}").Success)
{
fileName = fileName.Remove(0, 16);
}
string.Remove 会很好地工作:
var str = "1839341255115211butterflies.jpg";
str = str.Remove(0, 16);
Console.WriteLine(str);
使用 Linq:
删除开头的所有数字,直到 16 位:
string file = "1839341255115211butterflies.jpg";
string extension = Path.GetExtension(file);
string fileName = Path.GetFileNameWithoutExtension(file);
fileName = new string(fileName.Where((c, i) => i >= 17 || !Char.IsDigit(c)).ToArray());
file = fileName + extension;
编辑:如果您只想知道前 16 个字符是否为数字,则更容易且更具可读性:
bool startsWith16Digits = file.Take(16).All(Char.IsDigit);