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+") ...
Get Regular Expressions Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.