使用多个定界符拆分文件名
Splitting a file name with multiple delimiters
我将如何分割这个文件名。 image-1.png-ad-en-Km-Image.txt
这样最终的结果是这样的。 (也忽略末尾的“.txt”)。
- 图片-1.png
- 广告
- zh
- 公里
- 图片
换句话说,我想忽略第一个连字符 (-)。第一个 'segment' 将始终以 .png 或 .jpg 结尾。
我通常会这样做,但图像名称中的第一个连字符在工作中有点麻烦。
var endOfName = name.LastIndexOf(".txt");
var names = name.Substring(0, endOfName).Split('-');
看来,您正在使用 文件的名称,这就是为什么我建议使用 Path class 来操作 名称 和 扩展名:
using System.IO;
..
string source = "image-1.png-ad-en-Km-Image.txt";
// get rid of ".txt"
string name = Path.GetFileNameWithoutExtension(source);
// split extension ".png-ad-en-Km-Image" into {".png", "ad", "en", "Km", "Image"}
string[] items = Path.GetExtension(name).Split('-');
// Add file name "image-1" to the 1st item
items[0] = Path.GetFileNameWithoutExtension(name) + items[0];
一起来看看:
Console.WriteLine(string.Join(Environment.NewLine, items));
结果:
image-1.png
ad
en
Km
Image
请注意,即使是 精心设计的 文件名,如
string source = "my.image-1-2-3.png-ad-en-Km-Image.txt";
我们会有
my.image-1-2-3.png # <- valid file name
ad
en
Km
Image
如果文件名的模式不变,可以使用如下函数:
static List<string> GetNames(string filename)
{
var segments = filename.Split('.');
// The second segment contains all the "-" delimited tokens
// including the extension of the first segment (png/jpg)
var others = segments[1].Split('-');
var firstName = $"{segments[0]}.{others.First()}";
var names = new List<string> { firstName };
// Add all but the first element, since it's part of firstName
names.AddRange(others.Skip(1));
// If you wanted to add the final ".txt", you'd simply:
// names.Add($".{segments[2]}");
return names;
}
static void Main()
{
var filename = "image-1.png-ad-en-Km-Image.txt";
var names = GetNames(filename); // image-1.png, ad, en, Km, Image
}
我将如何分割这个文件名。 image-1.png-ad-en-Km-Image.txt
这样最终的结果是这样的。 (也忽略末尾的“.txt”)。
- 图片-1.png
- 广告
- zh
- 公里
- 图片
换句话说,我想忽略第一个连字符 (-)。第一个 'segment' 将始终以 .png 或 .jpg 结尾。
我通常会这样做,但图像名称中的第一个连字符在工作中有点麻烦。
var endOfName = name.LastIndexOf(".txt");
var names = name.Substring(0, endOfName).Split('-');
看来,您正在使用 文件的名称,这就是为什么我建议使用 Path class 来操作 名称 和 扩展名:
using System.IO;
..
string source = "image-1.png-ad-en-Km-Image.txt";
// get rid of ".txt"
string name = Path.GetFileNameWithoutExtension(source);
// split extension ".png-ad-en-Km-Image" into {".png", "ad", "en", "Km", "Image"}
string[] items = Path.GetExtension(name).Split('-');
// Add file name "image-1" to the 1st item
items[0] = Path.GetFileNameWithoutExtension(name) + items[0];
一起来看看:
Console.WriteLine(string.Join(Environment.NewLine, items));
结果:
image-1.png
ad
en
Km
Image
请注意,即使是 精心设计的 文件名,如
string source = "my.image-1-2-3.png-ad-en-Km-Image.txt";
我们会有
my.image-1-2-3.png # <- valid file name
ad
en
Km
Image
如果文件名的模式不变,可以使用如下函数:
static List<string> GetNames(string filename)
{
var segments = filename.Split('.');
// The second segment contains all the "-" delimited tokens
// including the extension of the first segment (png/jpg)
var others = segments[1].Split('-');
var firstName = $"{segments[0]}.{others.First()}";
var names = new List<string> { firstName };
// Add all but the first element, since it's part of firstName
names.AddRange(others.Skip(1));
// If you wanted to add the final ".txt", you'd simply:
// names.Add($".{segments[2]}");
return names;
}
static void Main()
{
var filename = "image-1.png-ad-en-Km-Image.txt";
var names = GetNames(filename); // image-1.png, ad, en, Km, Image
}