Feedback

C# - Regex.Replace mit mehr Parametern

Veröffentlicht von am 4/30/2015
(0 Bewertungen)
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);
    }
}
Abgelegt unter regex, lambda.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!