代码之家  ›  专栏  ›  技术社区  ›  spoulson

如何在.NET中只搜索/替换字符串中的第一个匹配项?

  •  25
  • spoulson  · 技术社区  · 16 年前

    .NET regex.replace方法似乎自动替换所有匹配的事件。我可以提供一个MatchEvaluator委托,它在第一次替换后返回匹配的字符串,不会产生任何更改,但对我来说这听起来非常低效。

    第一次更换后,最有效的停止方法是什么?

    5 回复  |  直到 6 年前
        1
  •  27
  •   bzlm    16 年前

    MSDN :

    Replace(String, String, Int32)   
    

    在指定的输入字符串中,替换指定的最大字符串数 将正则表达式模式与指定的替换字符串匹配。

    这不是你想要的吗?

        2
  •  25
  •   Will    16 年前

    只是为了回答最初的问题…以下regex仅匹配单词foo的第一个实例:

    (?<!foo.*)foo

    这个regex使用负的lookback(?<!)为了确保在匹配之前没有找到foo的实例。

        3
  •  3
  •   Viktor Pless    11 年前

    您可能使用了静态方法。没有(string、string、int32)重载。首先构造一个regex对象,并使用myregex.replace。

        4
  •  0
  •   Pini Cheyni    8 年前

    在这种情况下,您不能使用:

    string str ="abc546_$defg";
    str = Regex.Replace(str,"[^A-Za-z0-9]", "");
    

    相反,您需要声明新的regex实例并按如下方式使用它:

    string str ="abc546_$defg";
    Regex regx = new Regex("[^A-Za-z0-9]");
    str = regx.Replace(str,"",1)
    

    注意到 ,它表示替换应该发生的次数。

        5
  •  0
  •   dummyDev    6 年前

    而不是创建 new Regex 你也可以这样做

    Regex.Replace(originalString, "^"+pattern, stringToReplaceWith);

    替换第一个匹配项。