c# - 查找和替换文本,同时保持匹配的文本 CaSe
问题描述
我在一个网站上有简单的功能,用户输入要搜索的关键字,匹配的关键字被包裹起来,匹配的关键字<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
搜索关键字 =australia
假设我australia
在这种情况下输入了小写的关键字,它会找到匹配项并将其替换为语法错误的匹配Australia
项,australia
因为我希望将文本大小写与实际句子中的内容保持一致。
结果 =Trump asked australia to help investigate Mueller
如何在上面的代码中进行此更改,如果我删除RegexOptions.IgnoreCase
则它将不匹配,因为现在搜索关键字是 CaSe SenSiTive
解决方案
只需使用$1
(第一个捕获的组)
language 元素包括替换字符串中与 number 捕获组匹配的
$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
推荐阅读
- javascript - 小倍数:如何加轴?
- java - 使用 Java 12 运行 Eclipse 4.11
- python - 将文件读取 for 循环转换为列表推导
- bash - Bash - 将 kpartx 输出提取到变量
- java - 由于 java.lang.NoSuchMethodError,Tomcat 7 无法部署应用程序
- html - 将标签推送到下一行而不是溢出
- sed - 当行(来自管道)包含带有 GNU sed 的模式时,将 \n 替换为 \r
- java - How to make code work with try-catch? BMI Exceptions
- wine - 使用 winedbg 捕获系统调用
- c - 在 C 中使用数组处理文件