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

如何取搜索结果中关键词前后的几十个字
一个TextBox输入关键词,按"搜索"搜出title or   content字段中含有关键词的记录在gridview中显示,这个已经实现,想要:
1.如果是在title中搜出的,title全部显示,关键词红色显示,显示content的前面40个字.
2.如果是在content中搜出的,title全部显示,显示content的关键词前后共40个字,关键词红色显示.



------解决方案--------------------
c#里用 Substring(start,end)
------解决方案--------------------
楼主想偷懒 去看一下MSDN 里的 string 类 看一下类成员
------解决方案--------------------
楼主试试这个(不是很完美,效率也不高):

string keyWord = "人民 ";//关键字
string pattern = @ "([^ " + keyWord + "]{0,40})( " + keyWord + ")(.{0,40}) ";
//标题与内容
string title = "中华人民共和国中华人民共和国 ";
string body = "中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国 ";
//搜索结果
string resultTitle = null;
string resultBody = null;

resultTitle = Regex.Replace(title, "( " + keyWord + ") ", " <strong style= 'color:red; '> $1 </strong> ");
if (Regex.IsMatch(body, pattern))
{
Match m = Regex.Match(body, pattern);
string left = m.Groups[1].Value.ToString(); //关键字左边的文字
string right = m.Groups[3].Value.ToString(); //关键字右边的文字

if (left.Length + right.Length <= 40) //关键字前后的总字数不足40
{
resultBody = left + " <strong style= 'color:Red; '> " + keyWord + " </strong> " + right;
}
else
{
resultBody = left + " <strong style= 'color:Red; '> " + keyWord + " </strong> " + right.Substring(0, 40 - left.Length) + "... ";
}

}


Response.Write(resultTitle + " <br /> " + resultBody);
------解决方案--------------------
如果都有怎么办?

或者假如 title 命中 content 就不搜了(假如 title 先匹配)?

what 's 显示content的前面40个字/显示content的关键词前后共40个字 ???

如此需求 ....


冷静思考,动点脑筋,单纯的字符操作 ....

数据库 SELECT 中处理,或者 应用程序处理都形,前者效率高,但此查询功能目标也就定死了

假如 Content 是 Text 之类的 CLOB 类型,那么只有应用程序中才能 Replace 了
------解决方案--------------------
Substring(start,end)