3.16. Replace Matches with Replacements Generated in Code
Problem
You want to replace all matches of a regular expression with a new string that you build up in procedural code. You want to be able to replace each match with a different string, based on the text that was actually matched.
For example, suppose you want to replace all numbers in a string with the number multiplied by two.
Solution
C#
You can use the static call when you process only a small number of strings with the same regular expression:
string resultString = Regex.Replace(subjectString, @"\d+",
new MatchEvaluator(ComputeReplacement));Construct a Regex
object if you want to use the same regular expression with a large
number of strings:
Regex regexObj = new Regex(@"\d+");
string resultString = regexObj.Replace(subjectString,
new MatchEvaluator(ComputeReplacement));Both code snippets call the function ComputeReplacement. You should add this method
to the class in which you’re implementing this solution:
public String ComputeReplacement(Match matchResult) {
int twiceasmuch = int.Parse(matchResult.Value) * 2;
return twiceasmuch.ToString();
}VB.NET
You can use the static call when you process only a small number of strings with the same regular expression:
Dim MyMatchEvaluator As New MatchEvaluator(AddressOf ComputeReplacement) Dim ResultString = Regex.Replace(SubjectString, "\d+", MyMatchEvaluator)
Construct a Regex
object if you want to use the same regular expression with a large
number of strings:
Dim RegexObj As New Regex("\d+") ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access