Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does MatchEvaluator in Regex.Replace work?

This is the input string 23x * y34x2. I want to insert " * " (star surrounded by whitespaces) after every number followed by letter, and after every letter followed by number. So my output string would look like this: 23 * x * y * 34 * x * 2.

This is the regex that does the job: @"\d(?=[a-z])|[a-z](?=\d)". This is the function that I wrote that inserts the " * ".

Regex reg = new Regex(@"\d(?=[a-z])|[a-z](?=\d)");    MatchCollection matchC; matchC = reg.Matches(input); int ii = 1; foreach (Match element in matchC)//foreach match I will find the index of that match {     input = input.Insert(element.Index + ii, " * ");//since I' am inserting " * " ( 3 characters )     ii += 3;                                        //I must increment index by 3 } return input; //return modified input 

My question how to do same job using .net MatchEvaluator? I am new to regex and don't understand good replacing with MatchEvaluator. This is the code that I tried to wrote:

{     Regex reg = new Regex(@"\d(?=[a-z])|[a-z](?=\d)");     MatchEvaluator matchEval = new MatchEvaluator(ReplaceStar);     input = reg.Replace(input, matchEval);     return input; } public string ReplaceStar( Match match ) {     //return What?? } 
like image 578
dontoo Avatar asked Apr 06 '10 20:04

dontoo


People also ask

How does regex replace work?

The REGEXREPLACE( ) function uses a regular expression to find matching patterns in data, and replaces any matching values with a new string. standardizes spacing in character data by replacing one or more spaces between text characters with a single space.

What is $1 in regex replace?

For example, the replacement pattern $1 indicates that the matched substring is to be replaced by the first captured group.

How does regex replace work C#?

In a specified input string, replaces all strings that match a specified regular expression with a specified replacement string. In a specified input string, replaces all substrings that match a specified regular expression with a string returned by a MatchEvaluator delegate.


Video Answer


1 Answers

A MatchEvaluator is a delegate that takes a Match object and returns a string that should be replaced instead of the match. You can also refer to groups from the match. You can rewrite your code as follows:

string input = "23x * y34x2"; Regex reg = new Regex(@"\d(?=[a-z])|[a-z](?=\d)"); string result = reg.Replace(input, delegate(Match m) {     return m.Value + " * "; }); 

To give an example of how this works, the first time the delegate is called, Match parameter will be a match on the string "3". The delegate in this case is defined to return the match itself as a string concatenated with " * ". So the first "3" is replaced with "3 * ".

The process continues in this way, with delegate being called once for each match in the original string.

like image 182
Mark Byers Avatar answered Sep 17 '22 15:09

Mark Byers