0

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

1.2.0 MyDocfile.doc
1.1.2.3 另一个文件.txt

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

有人可以举个例子吗?

4

4 回答 4

5
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, ""));
于 2012-11-14T14:17:21.840 回答
3

"^[\\d.]* ?(.*)$"应该给你捕获中的实际文件名。

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

于 2012-11-14T14:16:37.407 回答
2

您可以使用:

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

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

于 2012-11-14T14:17:13.537 回答
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\.]* )

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

于 2012-11-14T14:30:03.653 回答