Pergunta

O que é o preg_replace PHP em C #?

Eu tenho uma matriz de cadeia que eu gostaria de substituir por um outro conjunto de string. Aqui está um exemplo em PHP. Como posso fazer algo como isso em C # sem usar .Recoloque ( "velho", "novo").

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


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

Solução 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;
    }
}

Aqui está o que eu vou usar. Alguns códigos de Jonathan Holland, mas não em C # 3.5, mas em C # 2.0:)

Thx todos.

Outras dicas

Os homens reais usam expressões regulares, mas aqui é um método de extensão que adiciona-lo para String se você queria:

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

Você usá-lo como este:

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

Você pode usar .Select () (em .NET 3.5 e C # 3) para facilitar a aplicação de funções de membros de uma coleção.

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

Você não precisa, você só quer uma maneira fácil de interagir sobre as matrizes.

Você está procurando System.Text.RegularExpressions;

using System.Text.RegularExpressions;

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

Para obter o comportamento conjunto de PHP da maneira que você tem que você precisa várias instâncias do `Regex

No entanto, no seu exemplo, você estaria muito melhor servido por .Recoloque (antigo, novo), é muito mais rápido do que a compilação de máquinas de estado.

Editar:. Uhg Eu só percebi esta questão era para 2.0, mas vou deixá-lo no caso de você ter acesso a 3,5

Apenas uma outra opinião sobre a coisa Linq. Agora eu usei List em vez de Char [], mas isso é apenas para torná-la um pouco mais limpo. Não há nenhum método IndexOf em matrizes, mas há um na lista. Por que eu preciso disso? Bem do que eu estou supondo, não existe uma correlação direta entre a lista de substituição e da lista de ser substituído. Apenas o índice.

Então, com isso em mente, você pode fazer isso com Char [] muito bem. Mas quando você vê o método IndexOf, você tem que adicionar em uma .ToList () antes dela.

Assim: 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);

Isto apenas converte o texto em uma matriz de caracteres, seleciona através de cada um. Se o personagem atual não está na lista de substituição, basta enviar de volta o personagem como é. Se ele está na lista de substituição, devolver o personagem do mesmo índice da lista de caracteres de substituição. Última coisa é criar uma string do array de caracteres.

  using System;
  using System.Collections.Generic;
  using System.Linq;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top