我遇到了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,它不应该这样做取代
答案 0 :(得分:3)
我建议使用明确的基于环视的边界替换前导和尾随字边界,这些边界将需要搜索字(?<!\S)
和(?!\S)
两端的空格字符或字符串的开头/结尾。此外,您需要在替换模式中使用$$
替换为文字$
。
我建议:
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
string text = @"It is @google.com or @google w@google \@google \\@google";
string result = SafeReplace(text,"@google", "some domain", true);
Console.WriteLine(result);
}
public static string SafeReplace(string input, string find, string replace, bool matchWholeWord)
{
string textToFind = matchWholeWord ? string.Format(@"(?<!\S){0}(?!\S)", Regex.Escape(find)) : find;
return Regex.Replace(input, textToFind, replace.Replace("$","$$"));
}
}
请参阅C# demo。
只有在Regex.Escape(find)
变量值中需要特殊的正则表达式元字符时才需要find
。
正则表达式演示可在regexstorm.net处获得。