Ich schreibe einen Übersetzer, nicht als seriöses Projekt, nur zum Spaß und um mit regulären Ausdrücken vertrauter zu werden. Aus dem unten stehenden Code könnt ihr herausfinden, wo ich damit hingehe (Cheezburger irgendjemand?).Ermitteln, welches Muster mit Regex.Matches übereinstimmt
Ich verwende ein Wörterbuch, das eine Liste von regulären Ausdrücken als Schlüssel verwendet, und der Wörterbuchwert ist List<string>
, der eine weitere Liste von Ersatzwerten enthält. Wenn ich es so mache, um herauszufinden, was der Ersatz ist, muss ich natürlich wissen, was der Schlüssel ist, wie kann ich herausfinden, welches Muster das Spiel ausgelöst hat?
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);
}
Ist was ich versuche, oder gibt es einen besseren Weg, um diesen Wahnsinn zu erreichen?
'(?! Ues)" Dies macht keinen Sinn, denn das ist genauso wie 'tion'. Vielleicht möchten Sie negative Lookbehind? "(?)?" Auch "Gottheit", nicht "Gesinnung". – polygenelubricants
... und Buddha, nicht Buddah ... und was ist eine Deckenkatze? –
@Tim: Ich denke, es ist ein Hinweis auf die virale Marketing-Kampagne, die eine Katze von einem Deckenventilator schwingen ließ. –