Pregunta

¿Qué es PHP preg_replace en C #?

Tengo un conjunto de cadenas que me gustaría reemplazar por otro conjunto de cadenas. Aquí hay un ejemplo en PHP. ¿Cómo puedo hacer algo así en C # sin usar .Replace (& Quot; old & Quot;, & Quot; new & Quot;).

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


$replacements[0] = 'à';
$replacements[1] = 'é';
$replacements[2] = 'é';
return preg_replace($patterns, $replacements, $text);
¿Fue útil?

Solución 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;
    }
}

Esto es lo que usaré. Algún código de Jonathan Holland pero no en C # 3.5 sino en C # 2.0 :)

Gracias a todos.

Otros consejos

Los hombres reales usan expresiones regulares, pero aquí hay un método de extensión que lo agrega a String si lo desea:

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

Lo usas así:

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

Puede usar .Select () (en .NET 3.5 y C # 3) para facilitar la aplicación de funciones a los miembros de una colección.

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

No necesita compatibilidad con expresiones regulares, solo desea una forma fácil de iterar sobre las matrices.

Estás buscando System.Text.RegularExpressions;

using System.Text.RegularExpressions;

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

Para obtener el comportamiento de matriz de PHP de la manera que lo necesita, necesita varias instancias de `Regex

Sin embargo, en su ejemplo, sería mucho mejor servido por .Replace (antiguo, nuevo), es mucho más rápido que compilar máquinas de estado.

Editar: Uhg Me acabo de dar cuenta de que esta pregunta era para 2.0, pero la dejaré en caso de que tengas acceso a 3.5.

Solo otra versión de lo de Linq. Ahora usé List & Lt; Char & Gt; en lugar de Char [] pero eso es solo para que se vea un poco más limpio. No hay un método IndexOf en las matrices, pero hay uno en la Lista. ¿Por qué necesitaba esto? Bueno, por lo que supongo, no existe una correlación directa entre la lista de reemplazo y la lista de las que se reemplazarán. Solo el índice.

Entonces, con eso en mente, puedes hacer esto con Char [] muy bien. Pero cuando ve el método IndexOf, debe agregar un .ToList () antes.

Así: 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);

Esto solo convierte el texto en una matriz de caracteres, selecciona a través de cada uno. Si el carácter actual no está en la lista de reemplazo, simplemente envíe el carácter como está. Si está en la lista de reemplazo, devuelva el carácter en el mismo índice de la lista de caracteres de reemplazo. Lo último es crear una cadena a partir de la matriz de caracteres.

  using System;
  using System.Collections.Generic;
  using System.Linq;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top