使用Asp.net进行正则表达式。
我已经编写了一个扩展方法,我想用它来替换整个单词 - 一个单词也可能是一个像'&'这样的特殊字符。
在这种情况下,我想替换'&'使用'和',我将需要使用相同的技术将其从'和'转回'和'',因此它必须仅适用于整个单词而不是像'hand'这样的扩展单词。
我已经为正则表达式模式尝试了一些变体 - 以'\ bWORD \ b'开头,它对于&符号根本不起作用,现在有'\ sWWORD \ s'几乎可以工作,除了它也删除单词周围的空格,意味着像“健康与美丽”这样的短语最终成为“healthandbeauty”。
任何帮助表示感谢。
这是扩展方法:
public static string ReplaceWord(this string @this,
string wordToFind,
string replacement,
RegexOptions regexOptions = RegexOptions.None)
{
Guard.String.NotEmpty(() => @this);
Guard.String.NotEmpty(() => wordToFind);
Guard.String.NotEmpty(() => replacement);
var pattern = string.Format(@"\s{0}\s", wordToFind);
return Regex.Replace(@this, pattern, replacement, regexOptions);
}
答案 0 :(得分:1)
为了匹配应该用空格括起来的动态字符串(或位于字符串的开头或结尾),您可以使用否定先行:
var pattern = string.Format(@"(?<!\S){0}(?!\S)", wordToFind);
^^^^^^^ ^^^^^^
甚至更安全:
var pattern = string.Format(@"(?<!\S){0}(?!\S)", Regex.Escape(wordToFind));
^^^^^^^^^^^^^
如果单词前面没有非空格字符,则(?<!\S)
lookbehind将失败匹配,如果单词后面没有非空白字符,(?!\S)
前瞻将使匹配失败。