简单的正则表达式替换以保持原始字符串

时间:2011-09-11 17:24:43

标签: c# asp.net regex string replace

我有这个:

Title = Regex.Replace(Title, s, "<span style=\"background:yellow\">" + s + "</span>", RegexOptions.IgnoreCase);

其中sfacebook之类的字词。如果标题是:

How to make a Facebook game

我想替换为:

How to make a <span style="background:yellow">Facebook</span> game

即使搜索词是'facebook'(注意大写)。基本上,我如何保留单词的原始大写字母?

另一个例子,搜索字词FACEBOOK,字符串Hello FaCeBoOk转为Hello <span style="background:yellow">FaCeBoOk</span>

3 个答案:

答案 0 :(得分:8)

您可以使用$& substitution

Regex.Replace(Title, s, "<span style=\"background:yellow\">$&</span>", RegexOptions.IgnoreCase)

答案 1 :(得分:1)

var input = "How to make a Facebook game, do you like facebook?";
var searchFor = "facebook";
var result = Regex.Replace(
    input, 
    searchFor, 
    "<span style=\"background:yellow\">$+</span>", 
    RegexOptions.IgnoreCase);

唯一重要的是$+。它包含最后获取的文本。这甚至适用于“如何制作Facebook游戏,你喜欢脸书吗?”第一个Facebook将保留为大写,第二个将保留为小写。

我要补充一点,如果你只想查看整个单词,那么你可以制作:

searchFor = @"\b" + searchFor + @"\b";

这将仅查找字边界上的字符串。

答案 2 :(得分:1)

您可以只包含与“facebook”匹配的捕获组,并将该捕获组包含在替换字符串中。这将最终将其包含在输入中出现的最终结果中。

var title = "How to make a Facebook game";
title = Regex.Replace(title,
                      "(facebook)",
                      "<span style=\"background:yellow\">$1</span>",
                      RegexOptions.IgnoreCase);

<强> See it in action