我在一个网站上具有简单的功能,在该网站上,用户输入要搜索的关键字,匹配的关键字用<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
答案 0 :(得分:1)
只需使用$1
(第一个捕获的组)
$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