2

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

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

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

4

4 回答 4

3

这个是为我做的:

(?<!\.[0-9a-z]*)[0-9]

这会在句点上进行否定的向后查找(字符串不得出现在匹配的字符串之前),后跟零个或多个字母数字字符。这可确保仅匹配不在您的分机中的数字。

显然,[0-9a-z] 必须替换为您在扩展程序中期望的字符。

于 2009-04-03T11:24:31.397 回答
2

我不认为你可以用一个正则表达式来做到这一点。

可能最好将原始字符串拆分为基础和扩展;在底座上进行更换;然后加入他们。

于 2009-04-03T10:51:13.070 回答
1

是的,我觉得你最好分开扩展。

如果您确定字符串末尾总是有 3 个字符的扩展名,那么最简单、最易读/可维护的解决方案是仅在

yourString.Substring(0,YourString.Length-4)

..然后追加

yourString.Substring(YourString.Length-4, 4)
于 2009-04-03T10:50:36.440 回答
1

为什么不在子字符串上运行正则表达式?

String filename = "aa514a3a.4s5";
String nameonly = filename.Substring(0,filename.Length-4);
于 2009-04-03T10:53:44.327 回答