Word-boundary-Problem in einer dynamischen C# regex-Muster
Ich versuche zu bauen, ein regex-Muster, bei dem einige Teile des Musters, die aus einer Datenbank abgerufen werden.
Beispielsweise
string pt= "@\"\\b(" + db.GetPattern + ")\\b\"";
Regex regex = new Regex(pt, RegexOptions.IgnoreCase | RegexOptions.Compiled);
return regex.Replace(input, "*");
Obwohl ich versuchte zu entkommen, konnte ich es nicht zu funktionieren. Wenn ich Baue das Muster manuell als
Regex regex = new Regex(@"\b(test|test2)\b", RegexOptions.IgnoreCase | RegexOptions.Compiled);
return regex.Replace(input, "*");
funktioniert es einwandfrei.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen
alternativ:
Der wesentliche Grund ist, dass das Muster, Sie geben ein Beispiel und die Zeichenfolge, die Sie bauen, sind sehr unterschiedlich. Dinge wie Zeichenketten, wie
@"foo"
nur Angelegenheit der C# - compiler, nach der Kompilierung werden alle Zeichenfolgen gleich sind. Die beiden Zeichenfolgen@"\b"
und"\\b"
sind völlig gleich, der einzige Unterschied ist, wie der C# - compiler wertet escape-Zeichen drin. Was bedeutet, dass es absolut keine Notwendigkeit, sich zu integrieren, und die C# - syntax in strings verwenden Sie zur Laufzeit.Grundsätzlich die Zeichenfolge, die Sie erstellt haben enthalten:
in der Erwägung, dass, Sie wollten die Muster
So Teile wie die
@
Zeichen und Anführungszeichen wurden Literale für die regex. Also es würde nicht übereinstimmen.