用C#替换字符串中的数字

时间:2009-04-03 10:43:43

标签: c# regex filenames

我以为我做了正则表达式替换

Regex r = new Regex("[0-9]"); 
return r.Replace(sz, "#");

在名为aa514a3a.4s5的文件上。它完全符合我的预期。它取代了所有数字,包括分机中的数字。我怎么做它不替换分机中的数字。我尝试了很多正则表达式字符串,但我开始认为它是一个全有或全无模式,所以我不能这样做?我需要将ext与字符串分开,还是可以使用正则表达式?

4 个答案:

答案 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);