Feedback

C# - Regex.Replace mit mehr Parametern

Veröffentlicht von am 30.04.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:
Snippet in VB übersetzen
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!