我正在用<span>keyword</span>来匹配和替换匹配词,
支持用户以小写输入搜索关键字,因为united states与关键字匹配并替换它
实际字符串
String str = "This is United States Of America"
匹配后的&替换函数字符串由用户输入的小写匹配字符串替换
赛后This is united states Of America
我想匹配并替换字符串,同时维护字符串或数据库中匹配单词的实际情况。
我对此使用了以下代码。我如何才能改变这一点,以使我的需求有意义。
string pattern = @"(\b(?:" + Request["SearchKeyword"].ToString().Trim() + @")\b))";
regex = new Regex(pattern, RegexOptions.IgnoreCase);
result = regex.Replace(result, "<span class='highlight'>" + Request["SearchKeyword"].ToString() + "</span>",);期望输出 This is United States Of America
发布于 2015-04-15 06:24:24
您需要使用Match().Value而不是原始的请求字符串。
下面是您可以使用的代码:
var req = "united states";
var str = "This is United States Of America";
var pattern = @"((?<=^\p{P}*|\p{Zs})(?:" + req.ToString().Trim() + @")(?=\p{P}*$|\p{Zs}))";
var regx = new Regex(pattern, RegexOptions.IgnoreCase);
var m = regx.Match(str);
var result = string.Empty;
if (m.Success)
result = regx.Replace(str, "<span class='highlight'>" + m.Value + "</span>");输出:

编辑:(万一)
使用lambda,您可以获得相同的结果:
var regx = new Regex(pattern, RegexOptions.IgnoreCase);
var result = regx.Replace(str, m => "<span class='highlight'>" + m.Value + "</span>");即使我们没有对手,也是安全的。
发布于 2015-04-15 06:27:35
您可以使用又一次超载 of Regex.Replace方法和MatchEvaluator。
string str = "This is United States Of America";
string SearchKeyword = "united states";
string pattern = @"(\b(?:" + SearchKeyword.Trim() + @")\b)";
var regex = new Regex(pattern, RegexOptions.IgnoreCase);
var result = regex.Replace(str, new MatchEvaluator(m => "<span class='highlight'>" + m.ToString() + "</span>"));https://stackoverflow.com/questions/29642827
复制相似问题