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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top