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?? }
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.
For example, the replacement pattern $1 indicates that the matched substring is to be replaced by the first captured group.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With