我以为我做了正则表达式替换
Regex r = new Regex("[0-9]");
return r.Replace(sz, "#");
在名为aa514a3a.4s5的文件上。它完全符合我的预期。它取代了所有数字,包括分机中的数字。我怎么做它不替换分机中的数字。我尝试了很多正则表达式字符串,但我开始认为它是一个全有或全无模式,所以我不能这样做?我需要将ext与字符串分开,还是可以使用正则表达式?
答案 0 :(得分:3)
这个适合我:
(?<!\.[0-9a-z]*)[0-9]
这会在句点上产生负面的后观(字符串不得出现在匹配的字符串之前),后跟零个或多个字母数字字符。这样可确保只匹配不在您的扩展程序中的数字。
显然,[0-9a-z]必须替换为您在扩展程序中预期的字符。
答案 1 :(得分:2)
我认为你不能用一个正则表达式来做到这一点。
可能最好将原始字符串拆分为基数和扩展名;在基地做替换;然后加入他们。
答案 2 :(得分:1)
是的,我觉得你最好分开扩展程序。
如果您确定字符串末尾始终有一个3个字符的扩展名,那么最简单,最易读/可维护的解决方案是仅执行替换
yourString.Substring(0,YourString.Length-4)
..然后追加
yourString.Substring(YourString.Length-4, 4)
答案 3 :(得分:1)
为什么不在子字符串上运行正则表达式?
String filename = "aa514a3a.4s5";
String nameonly = filename.Substring(0,filename.Length-4);