J'écris un traducteur, pas comme un projet sérieux, juste pour m'amuser et pour me familiariser un peu avec les expressions régulières. Du code ci-dessous, je pense que vous pouvez travailler là où je vais avec ça (cheezburger quelqu'un?).Détermination du modèle correspondant à l'aide de Regex.Matches
J'utilise un dictionnaire qui utilise une liste d'expressions régulières comme clés et la valeur du dictionnaire est un List<string>
qui contient une liste supplémentaire de valeurs de remplacement. Si je vais le faire de cette façon, afin de déterminer ce qu'est le substitut, j'ai évidemment besoin de savoir quelle est la clé, comment puis-je déterminer quel modèle a déclenché le match?
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);
}
Est ce que j'essaie possible, ou y a-t-il un meilleur moyen d'atteindre cette folie?
'(?! Ues) tion' cela n'a aucun sens, puisque c'est exactement la même chose que 'tion'. Peut-être que vous voulez lookbehind négatif? '(? polygenelubricants
... et Bouddha, pas Buddah ... et qu'est-ce qu'un chat de plafond? –
@Tim: Je pense que c'est une référence à la campagne de marketing viral qui a eu un chat se balançant d'un ventilateur de plafond. –