2017-03-13 4 views
3

übereinzustimmen Ich versuche, einen regulären Ausdruck zu finden, um genaues Wort zu finden und es durch ein anderes zu ersetzen. Aber der Ausdruck, den ich benutzt habe, ersetzt gerade Wörter, die mit bestimmten Zeichen wie @ beginnen.Regex-Ausdruck finden, um mit dem speziellen Wort

Hier ist mein Code:

static public string ReplaceWholeWord(this string original, string wordToFind, string replacement, RegexOptions regexOptions = RegexOptions.None){ 
     string pattern = String.Format(@"\b{0}\b", wordToFind); 
     string ret = Regex.Replace(original, pattern, replacement, regexOptions); 
     return ret; 
} 

Hier ist das Ergebnis:

var input = "if(@test is not null)"; 
input.ReplaceWholeWord("test", "x"); 

Ergebnis: if (@x ist nicht null)

Für den Moment nur, ich Sie müssen vermeiden, dass die Wörter mit dem Zeichen @ vor ihnen stehen.

+1

Es gibt eine Wortgrenze zwischen '@' und 't'. Versuchen Sie '@" (?

+0

@ WiktorStribiżew, ich nehme an, der 'test' sollte ersetzt werden in' if (test ...) ', so' (?

+0

@MoezRebai, würdest du bitte explizit angeben, welche Zeichen als "Teil eines Wortes" betrachtet werden und welche Zeichen nicht. –

Antwort

3

Da Sie nur ganze Wörter passend vermeiden möchten, die sofort mit einem @ Symbol vorangestellt sind, müssen Sie nur eine negative lookbehind hinzuzufügen:

@"\b(?<[email protected]){0}\b" 
    ^^^^^^ 

Siehe regex demo.

Die Regex wird nun zuerst mit einer Wortgrenzenposition übereinstimmen, dann wird das vorherige Zeichen überprüft, und wenn es eine @ ist, wird die gesamte Übereinstimmung fehlschlagen. Nur wenn das vorangestellte Zeichen nicht @ ist, wird test mit einer nachlaufenden Wortgrenze abgeglichen.

+0

Ich mag diese zweite Lösung, Art der Arbeit als Charme, danke. –

+0

Beachten Sie, dass Sie es weiter anpassen können: Wenn Sie auch Wörter vermeiden wollen, denen '#' vorangestellt ist, fügen Sie die unerwünschten Zeichen in eine Zeichenklasse ein und verwenden Sie '@" \ b (?

Verwandte Themen