【问题标题】:regex - Replace all dots,special characters except for the file extension正则表达式 - 替换除文件扩展名之外的所有点、特殊字符
【发布时间】:2010-01-19 05:21:26
【问题描述】:

我想要一个正则表达式,用下划线(_) 替换包含特殊字符和点(.) 等的文件名,但文件名的扩展名除外。

帮我用正则表达式

【问题讨论】:

  • 正则表达式: ([!@#$%^&*()]|(?:[.](?![a-z0-9]+$))) 不处理如果扩展名是大写的....比如说word文档DOC,TXT,HTML,XML,PDF,GIF,JPEG等请提出解决方案

标签: c# regex


【解决方案1】:

试试这个:

([!@#$%^&*()]|(?:[.](?![a-z0-9]+$)))

带有不敏感标志“i”。替换为“_”

可以自定义第一批字符,也可以使用 \W(任何非单词)

所以这读作:

在我匹配的地方和这个集合中替换为'_',或者后面没有一些字符或数字和行尾的句点

示例 c# 代码:

var newstr = new Regex("([!@#$%^&*()]|(?:[.](?![a-z0-9]+$)))", RegexOptions.IgnoreCase)
    .Replace(myPath, "_");

【讨论】:

  • 添加了 c# 代码 - 最初没有意识到这是一个 c# 问题
  • 正则表达式: ([!@#$%^&*()]|(?:[.](?![a-z0-9]+$))) 不处理如果扩展名是大写的......比如说word文档DOC,TXT,HTML,XML,PDF,GIF,JPEG等。
  • 呃……是的。我提到了两次,一次在第三行,一次在示例代码中,以使其不区分大小写
【解决方案2】:

由于您只关心扩展名,因此忘记文件名的其余部分。编写一个正则表达式来刮掉扩展名,丢弃原始文件名,然后将该扩展名粘贴到新文件名上。

此正则表达式将匹配扩展名,包括点。:\.[^.]*$

【讨论】:

    【解决方案3】:

    也许只是先取下扩展,然后再装上?类似于(但添加您自己的特殊字符列表):

    static readonly Regex removeChars = new Regex("[-. ]", RegexOptions.Compiled);
    static void Main() {
        string path = "ab c.-def.ghi";
        string ext = Path.GetExtension(path);
        path = Path.ChangeExtension(
            removeChars.Replace(Path.ChangeExtension(path, null), "_"), ext);
    }
    

    【讨论】:

      【解决方案4】:

      一旦你将文件扩展名从你的字符串中分离出来,this 就会让你完成剩下的工作?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-05
        • 1970-01-01
        • 2021-10-11
        • 1970-01-01
        相关资源
        最近更新 更多