【发布时间】:2010-01-19 05:21:26
【问题描述】:
我想要一个正则表达式,用下划线(_) 替换包含特殊字符和点(.) 等的文件名,但文件名的扩展名除外。
帮我用正则表达式
【问题讨论】:
-
正则表达式: ([!@#$%^&*()]|(?:[.](?![a-z0-9]+$))) 不处理如果扩展名是大写的....比如说word文档DOC,TXT,HTML,XML,PDF,GIF,JPEG等请提出解决方案
我想要一个正则表达式,用下划线(_) 替换包含特殊字符和点(.) 等的文件名,但文件名的扩展名除外。
帮我用正则表达式
【问题讨论】:
试试这个:
([!@#$%^&*()]|(?:[.](?![a-z0-9]+$)))
带有不敏感标志“i”。替换为“_”
可以自定义第一批字符,也可以使用 \W(任何非单词)
所以这读作:
在我匹配的地方和这个集合中替换为'_',或者后面没有一些字符或数字和行尾的句点
示例 c# 代码:
var newstr = new Regex("([!@#$%^&*()]|(?:[.](?![a-z0-9]+$)))", RegexOptions.IgnoreCase)
.Replace(myPath, "_");
【讨论】:
由于您只关心扩展名,因此忘记文件名的其余部分。编写一个正则表达式来刮掉扩展名,丢弃原始文件名,然后将该扩展名粘贴到新文件名上。
此正则表达式将匹配扩展名,包括点。:\.[^.]*$
【讨论】:
也许只是先取下扩展,然后再装上?类似于(但添加您自己的特殊字符列表):
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);
}
【讨论】:
一旦你将文件扩展名从你的字符串中分离出来,this 就会让你完成剩下的工作?
【讨论】: