Regex.Replace
This VB.NET function performs complex text substitutions. It can use a delegate function for replacements—this is a MatchEvaluator
type.
In simpler cases, it is often sufficient to use a String
replacement in VB.NET programs. And for performance, string
methods are better.
Let us begin with this program. After declaring the input string, we invoke the Regex.Replace
function and pass 3 arguments to it.
Replace()
are input string
reference, the pattern to match, and the replacement for matching sequences.Imports System.Text.RegularExpressions Module Module1 Sub Main() ' Input string. Dim input As String = "abc def axe" ' Use Regex.Replace with string arguments. Dim output As String = Regex.Replace(input, "a..", "CHANGED") ' Print. Console.WriteLine(input) Console.WriteLine(output) End Sub End Moduleabc def axe CHANGED def CHANGED
MatchEvaluator
Regex.Replace
function has a more powerful version. We must create a MatchEvaluator
instance, which is a delegate pointer to a function.
UpperFirst
function. This invokes the Regex.Replace
shared method, and passes 3 arguments.MatchEvaluator
instance.MatchEvaluator
, use the New operator and the AddressOf
operator with a function name.UpperEvaluator
method describes the implementation for the MatchEvaluator
. It uppercases only the first character of its input.Imports System.Text.RegularExpressions Module Module1 Sub Main() ' Write the uppercased forms. Console.WriteLine(UpperFirst("bird")) Console.WriteLine(UpperFirst("bird dog")) Console.WriteLine(UpperFirst("frog")) End Sub Function UpperFirst(ByRef value As String) As String ' Invoke the Regex.Replace function. Return Regex.Replace(value, _ "\b[a-z]\w+", _ New MatchEvaluator(AddressOf UpperEvaluator)) End Function Function UpperEvaluator(ByVal match As Match) As String ' Get string from match. Dim v As String = match.ToString() ' Uppercase only first letter. Return Char.ToUpper(v(0)) + v.Substring(1) End Function End ModuleBird Bird Dog Frog
We can store the MatchEvaluator
instance itself as a field upon the enclosing type. Then, you can simply access this field on each call to Regex.Replace
.
Regex
object as a field and call Replace
on that.MatchEvaluator
requires an understanding of how to construct an instance by assigning it to the address of an appropriate implementation.
MatchEvaluator
delegate type to an implementation. This must have the correct Match
and String
types.MatchEvaluator
, we create powerful mechanisms to programmatically mutate matching text patterns.Regex.Replace
is powerful. Using patterns and special characters, you can add power to your replacements, without adding imperative logic that is hard to maintain.