O'Reilly logo

C# Cookbook by Jay Hilyard, Stephen Teilhet

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

8.6. Augmenting the Basic String Replacement Function

Problem

You need to replace character patterns within the target string with a new string. However, in this case, each replacement operation has a unique set of conditions that must be satisfied in order to allow the replacement to occur. Consider, for example, that you receive a string in the form of XML (or possibly HTML). You wish to modify an attribute of a specific XML tag to a particular number, but only if that number is within a specified range (or possibly outside of a particular range).

Solution

Use the overloaded instance Replace method that accepts a MatchEvaluator delegate along with its other parameters. The MatchEvaluator delegate, which is a callback method that overrides the default behavior of the Replace method, is shown here:

using System; using System.Text.RegularExpressions; public static string MatchHandler(Match theMatch) { // Handle Top property of the Property tag if (theMatch.Value.StartsWith("<Property")) { long topPropertyValue = 0; // Obtain the numeric value of the Top property Match topPropertyMatch = Regex.Match(theMatch.Value, "Top=\"([-]*\\d*)"); if (topPropertyMatch.Success) { if (topPropertyMatch.Groups[1].Value.Trim( ).Equals("")) { // If blank, set to zero return (theMatch.Value.Replace("Top=\"\"", "Top=\"0\"")); } else if (topPropertyMatch.Groups[1].Value.Trim( ).Equals("-")) { // If only a negative sign (syntax error), set to zero return (theMatch.Value.Replace("Top=\"-\"", "Top=\"0\"")); ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required