Wenn man früher einen Regex.Replace machen wollte, der etwas komplizierter war, dann war das ziemlich komplex. Man musste sich entweder mit Member-Variablen oder einer eigenen Klasse behelfen:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
var replacer = new Replacer();
var result = replacer.ReplaceGroup("Hier Text 0815 Hier mehr Text", 42);
Console.WriteLine(result);
Console.ReadLine();
}
}
class Replacer
{
private Int32 m_Number;
public String ReplaceGroup(String text, Int32 number)
{
var regex = new Regex("Hier Text (?'Number'[0-9]+?) Hier mehr Text");
m_Number = number;
var result = regex.Replace(text, ReplaceRegex);
return (result);
}
private String ReplaceRegex(Match match)
{
var rawString = match.Groups[0].Value;
var toBeReplaced = match.Groups["Number"].Value;
var result = rawString.Replace(toBeReplaced, m_Number.ToString());
return (result);
}
}
Mit Lambda Expressions geht das deutlich eleganter:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
var replacer = new Replacer();
var result = replacer.ReplaceGroup("Hier Text 0815 Hier mehr Text", 42);
Console.WriteLine(result);
Console.ReadLine();
}
}
class Replacer
{
public String ReplaceGroup(String text, Int32 number)
{
var regex = new Regex("Hier Text (?'Number'[0-9]+?) Hier mehr Text");
var result = regex.Replace(text, match => ReplaceRegex(match, number));
return (result);
}
private String ReplaceRegex(Match match, Int32 number)
{
var rawString = match.Groups[0].Value;
var toBeReplaced = match.Groups["Number"].Value;
var result = rawString.Replace(toBeReplaced, number.ToString());
return (result);
}
}
Kommentare zum Snippet