c# - 使用 RegEx 去除文件名中的多个句点

标签 c# regex

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

我想知道是否有人知道如何处理这样命名的文件:

1.0.1.21 -- secret ...文档 或者 会计.文件.doc

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

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

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

最佳答案

您可以使用正则表达式来完成:

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

结果:

10121 -- Confidential.doc

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

\.    match a literal dot
(?=   start a lookahead 
.*    any characters
\.    another dot
)     close the lookahead

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

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

关于c# - 使用 RegEx 去除文件名中的多个句点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3268325/

相关文章:

c# - 在同一解决方案中为 CurrentCulture 获取两个不同的值

c# - 如何从我的 C# 代码运行 EXE 文件?

Python正则表达式,去除重复的类

regex - Node js Express 框架 - 正则表达式不起作用

c# - 正则表达式,用于匹配一个单词的所有实例,但包含该单词的特定超字符串除外

javascript - .split ("1px") 到 ["1px",1 ,"px"] 在 Javascript

c# - 如何在没有互操作程序集的情况下将任何文件类型嵌入到 Microsoft Word 中

c# - 抽象属性的 MVC 属性

c# - 如何将当前 VS 主题应用于现有控件

python - 正则表达式匹配任何保持序列顺序的字符串,即使它不完整