【问题标题】:Splitting a file name with multiple delimiters使用多个分隔符拆分文件名
【发布时间】:2021-05-26 15:38:27
【问题描述】:

我将如何拆分此文件名。 image-1.png-ad-en-Km-Image.txt 使最终结果看起来像这样。 (也忽略末尾的“.txt”)。

  • image-1.png
  • 广告
  • zh
  • 公里
  • 图片

换句话说,我想忽略第一个连字符 (-)。第一个“片段”总是以 .png 或 .jpg 结尾。

我通常会这样做,但图像名称中的第一个连字符在工作中会有点麻烦。

 var endOfName = name.LastIndexOf(".txt");
 var names = name.Substring(0, endOfName).Split('-');

【问题讨论】:

  • Split 需要一个字符数组: input.Split(new char[] {'-','.'}).ToArray();

标签: c# split filenames


【解决方案1】:

看来,您正在使用文件的名称,这就是为什么我建议使用Path 类来操作名称扩展

  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 

【讨论】:

    【解决方案2】:

    如果文件名的模式是常量,可以使用如下函数:

    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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 1970-01-01
      相关资源
      最近更新 更多