C# 中正则表达式进行忽略大小写的字符串替换

在 C# 里要进行忽略大小写的字符串替换,用 string 的 Replace 是很难做到的,即使花了天大的力气做到了,效率仍然是很低的,正确的方法应该是使用正则表达式。

使用正则表达式,首先需要引用命名空间:

using System.Text.RegularExpressions;


然后,非常简单,使用:

Regex.Replace(字符串, 要替换的子串, 替换子串的字符, RegexOptions.IgnoreCase);

就可以达到目的了,其中最后的参数 RegexOptions.IgnoreCase 即为指明忽略大小写。

但是,我现在要为一组字符串中的所有匹配的子字符串加上高亮显示(就是让它的字体样式和字符串其它的部分不一样),用下面的语句在字符串两端插入 html 标签,确实可以实现高亮,但高亮显示的就成了搜索子串的搜索字符串了,大小写与原文有差异。

打个比方:我在“第十三种 Asp.net 实现”中搜索的 keyString 为 "asp",替换后的字符串就成了“第十三种 asp.net 实现”,而不是希望的“第十三种  Asp.net 实现”。

DocumentResume[i] = Regex.Replace(hitDoc.Get("resume"), keyString, "" + keyString + "", RegexOptions.IgnoreCase);

所以,直接用正则表达式的 Replace 也不能达到我的需要,而要用到正则表达式的 Match 搜索方法(Match 搜索单条,Matchs 多条),然后在匹配的子串前后插入 html 标签,具体看下面的代码:

string pain = hitDoc.Get("resume");//字符串
System.Text.RegularExpressions.MatchCollection m = Regex.Matches(pain, keyString, RegexOptions.IgnoreCase); //忽略大小写搜索字符串中的关键字
for(int j = 0; j < m.Count; j++)
{
  //j×31 为插入 html 标签使 pain 字符串增加的长度,注意下面两句不能交换位置,否则将出现 HTML 标签插入错误。
  pain = pain.Insert((m[j].Index + keyString.Length + j * 31), ""); //关键字后插入 html 标签
  pain = pain.Insert((m[j].Index + j * 31), "");//关键字前插入 html 标签
}

当然,html 标签也不是胡乱插好了就管用的。还要在要显示这个插完后的字符串的页面代码的 head 区加入下面的自定义样式

<style type="text/css">
<!--
.Highlight
{
color: #00FFFF;
font-style: italic;
font-size: larger;
}
-->
</style>

注意:但正则表达式方式忽略大小写替换应该效率不是最高,但也不是最低,一般应用应该可以。

你可能感兴趣的