Question

Qu'est-ce que PHP preg_replace en C #?

J'ai un tableau de chaînes que j'aimerais remplacer par un autre tableau de chaînes. Voici un exemple en PHP. Comment puis-je faire quelque chose comme ça en C # sans utiliser .Replace (& "Vieux &"; & "Nouveau &";).

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


$replacements[0] = 'à';
$replacements[1] = 'é';
$replacements[2] = 'é';
return preg_replace($patterns, $replacements, $text);
Était-ce utile?

La solution 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;
    }
}

Voici ce que je vais utiliser. Un code de Jonathan Holland mais pas en C # 3.5 mais en C # 2.0:)

Merci à tous.

Autres conseils

Les vrais hommes utilisent des expressions régulières, mais voici une méthode d'extension qui l'ajoute à String si vous le vouliez:

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;
    }
}

Vous l'utilisez comme ceci:

 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));
        }        
    }

Vous pouvez utiliser .Select () (dans .NET 3.5 et C # 3) pour faciliter l'application de fonctions aux membres d'une collection.

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

Vous n'avez pas besoin de support regexp, vous voulez juste un moyen facile de parcourir les tableaux.

Vous recherchez System.Text.RegularExpressions;

using System.Text.RegularExpressions;

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

Pour obtenir le comportement de tableau de PHP comme vous avez besoin de plusieurs instances de `Regex

Cependant, dans votre exemple, vous seriez bien mieux servi par. Remplacez (ancien, nouveau), il est beaucoup plus rapide que la compilation des machines à états.

Edit: Uhg Je viens de réaliser que cette question était pour la version 2.0, mais je la laisserai au cas où vous auriez accès à la version 3.5.

Juste un autre point de vue sur Linq. Maintenant, j'ai utilisé List & Lt; Char & Gt; au lieu de Char [] mais c'est juste pour que ça paraisse un peu plus propre. Il n'y a pas de méthode IndexOf sur les tableaux, mais il en existe une sur la liste. Pourquoi ai-je besoin de ça? D'après ce que je devine, il n'y a pas de corrélation directe entre la liste de remplacement et la liste des personnes à remplacer. Juste l'index.

En gardant cela à l'esprit, vous pouvez le faire avec Char [], sans problème. Mais lorsque vous voyez la méthode IndexOf, vous devez ajouter un fichier .ToList () avant.

Comme ceci: 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);

Ceci convertit simplement le texte en un tableau de caractères, sélectionne chacun d'entre eux. Si le personnage actuel ne figure pas dans la liste de remplacement, il vous suffit de le renvoyer tel quel. S'il se trouve dans la liste de remplacement, renvoyez le caractère dans le même index que la liste de caractères de remplacement. La dernière chose à faire est de créer une chaîne à partir du tableau de caractères.

  using System;
  using System.Collections.Generic;
  using System.Linq;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top