【问题标题】:Replacing numbers in strings with C#用 C# 替换字符串中的数字
【发布时间】:2009-04-03 10:43:43
【问题描述】:

我想我会做一个正则表达式替换

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

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

【问题讨论】:

    标签: c# regex filenames


    【解决方案1】:

    这个是为我做的:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        上执行替换
        yourString.Substring(0,YourString.Length-4)
        

        ..然后追加

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

        【讨论】:

        • 我投票给了另一个更好的解决方案(我喜欢你们都用很少的词)而且我不喜欢你的例子中的硬编码 4;P。 .split 一路:D
        • Split 也不是很好——你必须假设没有 '.'字符串中其他任何地方的字符,并且文件名(很可能就是这样)可以让它们遍布整个地方。这完全取决于问题的具体细节。
        • System.IO.Path.GetFilename 在这种情况下可能会更好,但请参阅 Kamiel Wanrooij 的解决方案,了解如何在 Regex 中执行此操作。
        【解决方案4】:

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

        String filename = "aa514a3a.4s5";
        String nameonly = filename.Substring(0,filename.Length-4);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-20
          • 2019-05-09
          • 2014-07-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-03
          相关资源
          最近更新 更多