Frage

Was ist die PHP preg_replace in C #?

Ich habe ein Array von Zeichenfolge, die ich von einem anderen Array von Zeichenfolge ersetzen möchte. Hier ist ein Beispiel in PHP. Wie kann ich so etwas wie die in C #, ohne .replace mit ( "alt", "neu").

$patterns[0] = '/=C0/';
$patterns[1] = '/=E9/';
$patterns[2] = '/=C9/';


$replacements[0] = 'à';
$replacements[1] = 'é';
$replacements[2] = 'é';
return preg_replace($patterns, $replacements, $text);
War es hilfreich?

Lösung 3

public static class StringManipulation
{
    public static string PregReplace(string input, string[] pattern, string[] replacements)
    {
        if (replacements.Length != pattern.Length)
            throw new ArgumentException("Replacement and Pattern Arrays must be balanced");

        for (int i = 0; i < pattern.Length; i++)
        {
            input = Regex.Replace(input, pattern[i], replacements[i]);                
        }

        return input;
    }
}

Hier ist, was ich verwende. Einiger Code von Jonathan Holland aber nicht in C # 3.5, aber in C # 2.0:)

Thx alle.

Andere Tipps

Echte Männer verwenden reguläre Ausdrücke, aber hier ist eine Erweiterung Methode, die es zu String fügt hinzu, wenn man es wollte:

public static class ExtensionMethods
{
    public static String PregReplace(this String input, string[] pattern, string[] replacements)
    {
        if (replacements.Length != pattern.Length)
            throw new ArgumentException("Replacement and Pattern Arrays must be balanced");

        for (var i = 0; i < pattern.Length; i++)
        {
            input = Regex.Replace(input, pattern[i], replacements[i]);                
        }

        return input;
    }
}

Sie verwenden es wie folgt aus:

 class Program
    {
        static void Main(string[] args)
        {
            String[] pattern = new String[4];
            String[] replacement = new String[4];

            pattern[0] = "Quick";
            pattern[1] = "Fox";
            pattern[2] = "Jumped";
            pattern[3] = "Lazy";

            replacement[0] = "Slow";            
            replacement[1] = "Turtle";
            replacement[2] = "Crawled";
            replacement[3] = "Dead";

            String DemoText = "The Quick Brown Fox Jumped Over the Lazy Dog";

            Console.WriteLine(DemoText.PregReplace(pattern, replacement));
        }        
    }

Sie können mit .Select () (in .NET 3.5 und C # 3) erleichtern Funktionen an Mitgliedern einer Sammlung anwenden.

stringsList.Select( s => replacementsList.Select( r => s.Replace(s,r) ) );

Sie brauchen nicht regexp Unterstützung, wollen Sie nur eine einfache Möglichkeit, über die Arrays iterieren.

Sie suchen System.Text.RegularExpressions;

using System.Text.RegularExpressions;

Regex r = new Regex("=C0");
string output = r.Replace(text);

Um die PHP Array Verhalten die Art und Weise erhalten Sie mehrere Instanzen von `Regex

benötigen haben

Doch in Ihrem Beispiel, werden Sie viel besser durch .replace (alt, neu) serviert werden, ist es viel schneller als Zustandsmaschinen zu kompilieren.

Edit: UHG Ich habe erkannt, diese Frage für 2,0 war, aber ich werde es für den Fall, lassen Sie den Zugriff auf 3,5 tun haben

.

Ein weiterer nehmen auf die Linq Sache. Jetzt habe ich List anstelle von Char [], aber das ist nur, um es ein wenig sauberer aussehen zu lassen. Es gibt keine Methode IndexOf auf Arrays, aber es gibt eine auf Liste. Warum brauchte ich das? Nun, was ich bin zu raten, gibt es keine direkte Korrelation zwischen der Ersatzliste und der Liste der ersetzt werden. Nur der Index.

So mit dem im Verstand, können Sie dies mit Char [] just fine. Aber wenn Sie die IndexOf-Methode sehen, haben Sie in einem .ToList (), bevor es hinzuzufügen.

Wie folgt aus:. SomeArray.ToList () IndexOf

  String text;
  List<Char> patternsToReplace;
  List<Char> patternsToUse;

  patternsToReplace = new List<Char>();
  patternsToReplace.Add('a');
  patternsToReplace.Add('c');
  patternsToUse = new List<Char>();
  patternsToUse.Add('X');
  patternsToUse.Add('Z');

  text = "This is a thing to replace stuff with";

  var allAsAndCs = text.ToCharArray()
                 .Select
                 (
                   currentItem => patternsToReplace.Contains(currentItem) 
                     ? patternsToUse[patternsToReplace.IndexOf(currentItem)] 
                     : currentItem
                 )
                 .ToArray();

  text = new String(allAsAndCs);

Dies wandelt nur den Text in eine Zeichengruppe, die jeweils durch auswählt. Wenn das aktuelle Zeichen nicht in der Ersatzliste ist, nur den Charakter zurückschicken, wie ist. Wenn es in der Ersatzliste ist, bringen Sie das Zeichen in dem gleichen Index der Ersatzzeichen-Liste. Das Letzte, was ist eine Zeichenfolge aus dem Zeichen-Array zu erstellen.

  using System;
  using System.Collections.Generic;
  using System.Linq;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top