我必须使用一些可以包含某些前缀的文件/文件夹。例如,文件名可以是
1.2.0 MyDocfile.doc
1.1.2.3 另一个文件.txt
我希望能够删除前缀和之后的空格(1.2.0、1.1.2.3),然后只取实际的文件名。
做这个的最好方式是什么 ?常用表达 ?
有人可以举个例子吗?
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, ""));
"^[\\d.]* ?(.*)$"
应该给你捕获中的实际文件名。
这是一个通用的答案,因为我不知道 C#。
您可以使用:
fileName = fileName.Substring(fileName.IndexOf(' ') + 1);
如果名称中没有空格,它将只返回名称。这避免了对任何正则表达式的需要。
正则表达式将是最好的解决方案。如果前缀的格式与您描述的一致,则以下内容应将其删除:
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\.]* )
。
更新:我添加了插入符号 '^' 以指示它应该匹配字符串的开头。