我必须处理一些可能包含某些前缀的文件/文件夹。例如,文件名可以是
1.2.0 MyDocfile.doc
1.1.2.3 Anotherfile.txt
我希望能够删除之后的前缀和空格(1.2.0,1.1.2.3)并只取实际文件名。
做这个的最好方式是什么 ?常用表达 ?
有人可以举个例子吗?
答案 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\.]* )
。
更新:我添加了插入符'^'以表示它应该与字符串的开头匹配。