C # preg_replace?
-
03-07-2019 - |
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);
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
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;