Feedback

Regex.Replace mit mehr Parametern

Sprache: C#

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: [code] 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); } } [/code] 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);
    }
}
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);
    }
}