How to Regex search/replace only first occurrence in a string in .NET?

后端 未结 4 975
傲寒
傲寒 2020-11-29 10:46

It seems the .NET Regex.Replace method automatically replaces all matching occurrences. I could provide a MatchEvaluator delegate that returns the matched string after the

相关标签:
4条回答
  • 2020-11-29 11:31

    From MSDN:

    Replace(String, String, Int32)   
    

    Within a specified input string, replaces a specified maximum number of strings that match a regular expression pattern with a specified replacement string.

    Isn't this what you want?

    0 讨论(0)
  • 2020-11-29 11:34

    You were probably using the static method. There is no (String, String, Int32) overload for that. Construct a regex object first and use myRegex.Replace.

    0 讨论(0)
  • 2020-11-29 11:45

    In that case you can't use:

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

    Instead you need to declare new Regex instance and use it like this:

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

    Notice the 1, It represents the number of occurrences the replacement should occur.

    0 讨论(0)
  • 2020-11-29 11:48

    Just to answer the original question... The following regex matches only the first instance of the word foo:

    (?<!foo.*)foo

    This regex uses the negative lookbehind (?<!) to ensure no instance of foo is found prior to the one being matched.

    0 讨论(0)
提交回复
热议问题