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

8

我有这个:

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

其中s是类似于facebook的单词。如果标题是:

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个回答

10
你可以使用$&替换来实现:
Regex.Replace(Title, s, "<span style=\"background:yellow\">$&</span>", RegexOptions.IgnoreCase)

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吗?”第一个Facebook将保留大写,第二个Facebook将保留小写。

我还要补充的是,如果您只想查找整个单词,则可以使用以下方法:

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

这将只查找位于单词边界上的字符串。


1

您可以简单地包含一个捕获组,匹配单词“facebook”,并将该捕获组作为替换字符串的一部分。这将确保在最终结果中包含它,就像它在输入中出现的那样。

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

看它如何运作


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接