我想要一个正则表达式,以便用文件名的扩展名替换包含特殊字符和点(。)等的文件名和下划线(_)。
帮助我使用正则表达式
答案 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然后让你完成其余的工作吗?