查找并替换文本,同时保持匹配的文本大写字母

时间:2019-10-01 05:47:49

标签: c# regex

我在一个网站上具有简单的功能,在该网站上,用户输入要搜索的关键字,匹配的关键字用<span></span>包裹,并且匹配关键字的颜色也发生了变化。

下面的代码在找到匹配项的“标题”中查找并替换关键字,但是根据输入关键字的方式来更改匹配项的大小写。

protected String getTitle(object title)
{
    string sTitle = title.ToString();

    Regex regex = null;
    string pattern = @"(\b(?:" + _Keyword.ToString().Trim() + @")\b)(?![^<]*?>)";
    regex = new Regex(pattern,RegexOptions.IgnoreCase);
    sTitle = regex.Replace(sTitle, "<span class='keyword-highlight'>" + _Keyword + "</span>");
    return sTitle;
}

实际文本= Trump asked Australia to help investigate Mueller Searck关键字= australia

让我们说我在小写的australia中输入了关键字,在这种情况下,它将找到匹配项,并将Australia替换为australia,这在语法上是错误的,因为我想保留文本大小写与实际句子相同。

结果= Trump asked australia to help investigate Mueller

如何在上面的代码中进行此更改,如果删除了RegexOptions.IgnoreCase,那么它将不匹配,因为现在搜索关键字为CaSe SenSiTive

1 个答案:

答案 0 :(得分:1)

只需使用$1(第一个捕获的组)

Substituting a Numbered Group

  

$number语言元素包括最后一个与   替换字符串中的数字捕获组,其中number为   捕获组的索引。

示例

var input = "Trump asked Australia to help investigate Mueller";
var keyword = "australia"; 

var pattern = @"(\b(?:" + keyword.Trim() + @")\b)(?![^<]*?>)";
var result = Regex.Replace(input, pattern, "<span class='keyword-highlight'>$1</span>", RegexOptions.IgnoreCase);

Console.WriteLine(result);

输出

Trump asked <span class='keyword-highlight'>Australia</span> to help investigate Mueller