Mit \ b in C # reguläre Ausdrücke nicht funktioniert?
-
20-09-2019 - |
Frage
Ich frage mich, warum die folgende regex nicht übereinstimmt.
string query = "\"1 2\" 3";
string pattern = string.Format(@"\b{0}\b", Regex.Escape("\"1 2\""));
string repl = Regex.Replace(query, pattern, "", RegexOptions.CultureInvariant);
Beachten Sie, dass, wenn ich die Wortgrenze Zeichen entfernen (\ b) aus pattern
, paßt es in Ordnung. Gibt es etwas über ‚\ b‘, die diese werden Auslösung könnte?
Lösung
Ein Zitat ist kein Wortzeichen, so \ b wird kein Spiel, wenn es da ist. Es gibt kein Wort Zeichen vor dem Zitat; so vor dem Zitat, gibt es keinen Übergang zwischen Wortzeichen und Nicht-Wort-Zeichen. Also, keine Übereinstimmung.
Von Ihrem Kommentar, den Sie versuchen, Wort-Zeichen aus einer Zeichenfolge zu entfernen. Der einfachste Weg, dies zu tun wäre \w
mit einem leeren String ersetzt werden:
string repl = Regex.Replace(query, "\w", "", RegexOptions.CultureInvariant);
Andere Tipps
Sie erwarten ein Leerzeichen. es ist nicht ein zu finden. ersetzen
string query = "\"1 2\" 3";
mit
string query = "\" 1 2 \" 3";
und Sie werden sehen, was ich meine.