68 Stimmen

Regex.Match ganze Wörter

Unter C# Ich möchte einen regulären Ausdruck verwenden, der auf jedes dieser Wörter passt:

string keywords = "(shoes|shirt|pants)";

Ich möchte die ganzen Wörter in der Inhaltszeichenfolge finden. Ich dachte dies regex würde das tun:

if (Regex.Match(content, keywords + "\\s+", 
  RegexOptions.Singleline | RegexOptions.IgnoreCase).Success)
{
    //matched
}

aber es liefert true für Wörter wie participants auch wenn ich nur das ganze Wort will pants .

Wie kann ich nur diese wörtlichen Wörter abgleichen?

117voto

Philippe Leybaert Punkte 161931

Sie sollten das Wort delimiter zu Ihrer Regex hinzufügen:

\b(shoes|shirt|pants)\b

Im Code:

Regex.Match(content, @"\b(shoes|shirt|pants)\b");

19voto

Ben Lings Punkte 28080

Versuchen Sie

Regex.Match(content, @"\b" + keywords + @"\b", RegexOptions.Singleline | RegexOptions.IgnoreCase)

\b Übereinstimmungen an Wortgrenzen. Siehe aquí für weitere Einzelheiten.

11voto

richardtallent Punkte 33425

Sie brauchen eine Null-Breite-Behauptung auf jeder Seite, dass die Zeichen vor oder nach dem Wort nicht Teil des Wortes sind:

(?=(\W|^))(shoes|shirt|pants)(?!(\W|$))

Wie andere vorgeschlagen haben, habe ich denken \b funktioniert anstelle von (?=( \W |^)) y (?!( \W |$)) auch wenn das Wort am Anfang oder am Ende der Zeichenkette steht, aber ich bin mir nicht sicher.

3voto

t3rse Punkte 9900

Eine Wortgrenze setzen, indem Sie die \b metasequence.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X