如何使用正则表达式

时间:2016-05-09 08:39:07

标签: asp.net regex

使用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);
    }

1 个答案:

答案 0 :(得分:1)

为了匹配应该用空格括起来的动态字符串(或位于字符串的开头或结尾),您可以使用否定先行

var pattern = string.Format(@"(?<!\S){0}(?!\S)", wordToFind);
                              ^^^^^^^   ^^^^^^       

甚至更安全:

var pattern = string.Format(@"(?<!\S){0}(?!\S)", Regex.Escape(wordToFind));
                                                 ^^^^^^^^^^^^^ 

如果单词前面没有非空格字符,则(?<!\S) lookbehind将失败匹配,如果单词后面没有非空白字符,(?!\S)前瞻将使匹配失败。