【发布时间】:2017-01-16 06:03:55
【问题描述】:
我遇到了How to search and replace exact matching strings only。但是,当有以@开头的单词时,它不起作用。我的小提琴在这里https://dotnetfiddle.net/9kgW4h
string textToFind = string.Format(@"\b{0}\b", "@bob");
Console.WriteLine(Regex.Replace("@bob!", textToFind, "me"));// "@bob!" instead of "me!"
此外,除此之外,我想做的是,如果一个单词以 \@ 开头,例如 \@myname,并且如果我尝试查找和替换 @myname,它不应该进行替换。
【问题讨论】:
-
本题与escaping无关,与词界有关。您是否打算仅在没有前面和后面没有字符字符时匹配
textToFind?在string.Format中尝试@"(?<!\w){0}(?!\w)"正则表达式并用replace.Replace("$", "$$")替换(如果您的替换字符串可能包含您想视为文字字符的$符号)。 -
至于“红利”部分,还不是很清楚,但也许
@"(?<!\w)(?<!(?<!\\)\\(?:\\\\)*){0}(?!\w)"可以? -
我打算匹配确切的单词。因此,如果我找到“@bob”并尝试替换它应该只匹配“@bob”而不是“@bob.com”或\@bob。同样对于 \@bob 应该只匹配 \@bob