正则表达式 - 替换除文件扩展名以外的所有点,特殊字符

时间:2010-01-19 05:21:27

标签: c# regex

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

帮助我使用正则表达式

4 个答案:

答案 0 :(得分:6)

试试这个:

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

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

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

所以这读作:

替换为我匹配的'_'和此集合,或者没有后跟某些字符或数字以及行尾的句点

示例c#代码:

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

也许只是先取下扩展程序然后重新启用它?类似的东西(但添加你自己的特殊字符列表):

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);
}

答案 3 :(得分:1)

一旦你将文件扩展名从你的字符串中分离出来this然后让你完成其余的工作吗?