从C#中的字符串中删除前缀模式

时间:2012-11-14 14:14:20

标签: c# regex string

我必须处理一些可能包含某些前缀的文件/文件夹。例如,文件名可以是

  

1.2.0 MyDocfile.doc
  1.1.2.3 Anotherfile.txt

我希望能够删除之后的前缀和空格(1.2.0,1.1.2.3)并只取实际文件名。
做这个的最好方式是什么 ?常用表达 ?

有人可以举个例子吗?

4 个答案:

答案 0 :(得分:4)

var formattedName = name.Substring(name.IndexOf(" ") + 1);

如果是可选前缀,则需要正则表达式:

var formattedName = Regex.Replace(name, @"^[\d.]* ",  "");

要格式化所有文件名:

Regex regex = new Regex(@"^[\d.]* ");
IEnumerable<string> formattedNames = names.Select(f => regex.Replace(f, ""));

答案 1 :(得分:3)

"^[\\d.]* ?(.*)$"应该在捕获中为您提供实际的文件名。

这是一个通用的答案,因为我不知道C#。

答案 2 :(得分:2)

您可以使用:

fileName = fileName.Substring(fileName.IndexOf(' ') + 1);

如果名称中没有空格,则只返回名称。这避免了对任何正则表达式的需要。

答案 3 :(得分:0)

正则表达式将是最佳解决方案。如果前缀采用您所描述的一致格式,则以下内容应将其删除:

filenames.RemoveAll(filename => Regex.IsMatch(filename, @"^([\d\.]+ )"));

这是一个更完整的例子:

var filenames = new List<string> { "1.2.0 MyDocfile.doc", "1.1.2.3 Anotherfile.txt", "Otherfile.doc", " strange_file_name.docx" };
filenames.RemoveAll(filename => Regex.IsMatch(filename, @"^([\d\.]+ )"));    
filenames.ForEach(Console.WriteLine);

这将打印“Otherfile.doc”和“strange_file_name.docx”。如果您还想删除最后一个文件(以空格开头),请使用以下模式^([\d\.]* )

更新:我添加了插入符'^'以表示它应该与字符串的开头匹配。