【问题标题】:Getting rid of multiple periods in a filename using RegEx使用 RegEx 去除文件名中的多个句点
【发布时间】:2010-07-17 05:23:27
【问题描述】:

我有一个应用程序需要我“清理”“脏”文件名。

我想知道是否有人知道如何处理名称如下的文件:

1.0.1.21 -- 机密...文档 或者 会计.Files.doc

基本上,不能保证每个文件名的句点都在同一个位置。我希望通过驱动器递归,在文件名本身中搜索句点(减去扩展名),删除句点,然后将扩展名附加到它上面。

有没有人知道更好的方法或如何执行我希望做的事情? 请注意,regEx 是此项目的要求。

编辑:我不想看到 1.0.1.21 -- Confidential...doc,而是希望看到:10121 -- Confidential.doc
对于其他文件名,而不是 Accounting.Files.doc,我想查看 AccountingFiles.doc

【问题讨论】:

  • 您能否给出两个示例的预期输出,以便完全清楚您想要什么?
  • @yeahumok:好的,这就是我认为你想要的描述。我只是在确定。

标签: c# regex


【解决方案1】:

你可以用正则表达式来做到这一点:

string s = "1.0.1.21 -- Confidential...doc";
s = Regex.Replace(s, @"\.(?=.*\.)", "");
Console.WriteLine(s);

结果:

10121 -- 机密.doc

正则表达式可以分解如下:

\。匹配文字点 (?= 开始前瞻 .* 任何字符 \。另一个点 ) 关闭前瞻

或者用简单的英语:删除后面至少有一个点的每个点。

使用内置方法来处理文件名和扩展名会更简洁,所以如果你能以某种方式消除它必须是正则表达式的要求,我认为它会使解决方案变得更好。

【讨论】:

  • @Chad:不,这只会直接删除点。
  • @Tim Pietzcker,要求被澄清后发生了变化......我删除了我的答案,但无法删除该评论。
【解决方案2】:

这是一个不使用正则表达式的替代解决方案——也许它更具可读性:

string s = "1.0.1.21 -- Confidential...doc";
int extensionPoint = s.LastIndexOf(".");
if (extensionPoint < 0) {
    extensionPoint = s.Length;
}
string nameWithoutDots = s.Substring(0, extensionPoint).Replace(".", "");
string extension = s.Substring(extensionPoint);
Console.WriteLine(nameWithoutDots + extension);

【讨论】:

  • 我喜欢这个解决方案。我有一个问题:如果 (extensionPoint
  • 是的,没错。我在那里进行了检查以避免 String.Substring 引发异常,并且如果您想在其他地方使用“扩展”并且真的想在没有空字符串时获得一个空字符串进行扩展。
【解决方案3】:

我会在没有正则表达式的情况下这样做*。 (免责声明:我不擅长正则表达式,所以这可能就是原因。)

考虑这个选项。

string RemovePeriodsFromFilename(string fullPath)
{
    string dir = Path.GetDirectoryName(fullPath);
    string filename = Path.GetFileNameWithoutExtension(fullPath);
    string sanitized = filename.Replace(".", string.Empty);
    string ext = Path.GetExtension(fullPath);

    return Path.Combine(dir, sanitized + ext);
}

* 哎呀,看起来你说使用正则表达式是一个要求。没关系! (虽然我不得不问:为什么?)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    相关资源
    最近更新 更多