Escribo un traductor, no como un proyecto serio, solo por diversión y para familiarizarme un poco más con las expresiones regulares. Desde el código a continuación, creo que puedes averiguar hacia dónde voy con esto (¿quién es Cheezburger?).Determinar qué patrón coincide con el uso de Regex.Matches
Estoy usando un diccionario que usa una lista de expresiones regulares como las claves y el valor del diccionario es List<string>
que contiene una lista adicional de valores de reemplazo. Si voy a hacerlo de esta manera, para poder averiguar cuál es el sustituto, obviamente necesito saber cuál es la clave, ¿cómo puedo averiguar qué patrón desencadenó la coincidencia?
var dictionary = new Dictionary<string, List<string>>
{
{"(?!e)ight", new List<string>(){"ite"}},
{"(?!ues)tion", new List<string>(){"shun"}},
{"(?:god|allah|buddah?|diety)", new List<string>(){"ceiling cat"}},
..
}
var regex = "(" + String.Join(")|(", dictionary.Keys.ToArray()) + ")";
foreach (Match metamatch in Regex.Matches(input
, regex
, RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture))
{
substitute = GetRandomReplacement(dictionary[ ????? ]);
input = input.Replace(metamatch.Value, substitute);
}
¿Es lo que estoy intentando posible, o hay una mejor manera de lograr esta locura?
'(?! Ues) tion' esto no tiene sentido, ya que es lo mismo que' tion'. ¿Quizás quieres un look negativo detrás? '(? polygenelubricants
... y Buda, no Buddah ... ¿y qué es un gato de techo? –
@Tim: Creo que es una referencia a la campaña de marketing viral que tenía un gato colgando de un ventilador de techo. –