代码之家  ›  专栏  ›  技术社区  ›  venkat

regex-替换除文件扩展名以外的所有点、特殊字符

  •  4
  • venkat  · 技术社区  · 14 年前

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

    帮我拿个正则表达式

    4 回复  |  直到 14 年前
        1
  •  6
  •   Luke Schafer    14 年前

    试试这个:

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

    带着麻木不仁的旗子“我”。替换为“\

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

    所以这读作:

    替换为与此集合匹配的“\u”,或不后跟某些字符或数字和行尾的句点

    样本C代码:

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

    因为您只关心扩展名,所以忘记文件名的其余部分。编写一个regex来删除扩展名,丢弃原始文件名,然后将该扩展名粘贴到新文件名上。

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

        3
  •  1
  •   Marc Gravell    14 年前

    或许先把分机取下来,然后再放回去?类似于(但添加您自己的特殊字符列表):

    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
  •  1
  •   Community Paul Sweatte    7 年前

    一旦将文件扩展名从字符串中分离出来 this 那剩下的路怎么走?