日期:2014-05-18  浏览次数:20442 次

多关键字替换 问题 100分求解
有一个关键字数组string[],内有n个关键字(中文)
有一个目标字符串,内有 <br>   <font> 等html代码
想要替换掉目标字符串中出现的关键字(只要是在string[]中出现的),同时能忽略掉html代码中含在 <         > 中的内容。
比如说   string[]   中有   “上海”“北京”“天津” "abc "
目标字符串为   "上海在北京和天津的 <br   > 南边 <a   href= "# "> ddd </a> "

统一替换为 " <a> 上海 </a> 在 <a> 北京 </a> 和 <a> 天津 </a> 的 <br   > 南边 <a   href= "# "> ddd </a> "

我现在用循环的方法解决(但是没有办法解决忽略 <     > 中的办法)。但是这种情况能用正则表达式一次解决掉吗?请高手赐教。

------解决方案--------------------
先出了个问题,现在改好了
private string ReplaceStr(string[] source,string rpstr)
{
for (int i = 0; i < source.Length; i++)
{
if (rpstr.IndexOf(source[i]) != -1)
{
int start = rpstr.IndexOf(source[i]);
if (start > 0)
{
if (rpstr.Substring(start - 1, 1) == "> ")
{
int end1 = rpstr.Substring(0, start).LastIndexOf( " <a ");
int end2 = rpstr.Substring(0, start).LastIndexOf( " </a> ");
if (end1 > end2)
{
rpstr = rpstr.Replace(rpstr.Substring(0, start).Substring(end1), " <a> ");
//Response.Write(rpstr.Substring(0, start-1).Substring(end1)+ " <br> ");
}
else
{
rpstr = rpstr.Replace(source[i], " <a> " + source[i] + " </a> ");
}
}
else
{
rpstr = rpstr.Replace(source[i], " <a> " + source[i] + " </a> ");
}
}
else
{
rpstr = rpstr.Replace(source[i], " <a> " + source[i] + " </a> ");
}
}
}
return rpstr;
}
------解决方案--------------------
Highlighting Multiple Search Keywords in ASP.NET

http://www.dotnetjunkies.com/Tutorial/195E323C-78F3-4884-A5AA-3A1081AC3B35.dcik
一个很好的教程和代码下载
------解决方案--------------------
StringBuilder拼接出替换用正则表达式,然后用另一个正则表达式匹配出非 <...> 内容,用委托做替换处理

StringBuilder拼接正则时,如果英文好办,两侧加\b即可,如果是中文注意包含关系

当然,以上仅指 <...> 不包含“ <”和“> ”这两个字符的情况,如果包含这两个字符,单纯正则处理起来很吃力了,最好用其它方法处理