我正在尝试找到一个正则表达式来匹配确切的单词并将其替换为另一个。但是我使用的表达式,甚至替换了以@等特定字符开头的单词。
这是我的代码:
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;
}
结果如下:
var input = "if(@test is not null)";
input.ReplaceWholeWord("test", "x");
结果:if(@x不为空)
目前,我只需要避免匹配前面有@
字符的单词。
答案 0 :(得分:3)
由于您只想避免匹配紧跟@
符号的整个单词,因此您只需添加negative lookbehind:
@"\b(?<!@){0}\b"
^^^^^^
请参阅regex demo。
正则表达式现在首先匹配单词边界位置,然后它将检查前一个字符,如果它是@
,则整个匹配将失败。仅当前面的字符不是@
时,带有尾随字边界的test
才会匹配。