关于正则表达式的问题(100分)
写一个方法,有两个参数,第一个参数content 是一个字符串, 第二参数是一个array, 字符串数组,存放的是一些关键字,方法最后返回一个string.
如果
content= "I am a boy , they boys . ";
arrStr={ "boy ", "boys ", "female ", "gender "}
使用正则表达式,要返回content包含的关键字(就是arrStr里面出现的) 格式是 return "boy,boys ";
如何实现?
------解决方案--------------------与搜索有关吧?
参考Lucene的实现原理吧
简单的话就indexOf吧
------解决方案--------------------正则不会,这样也可以解决:
protected string Get_keyword()
{
string content= "I am a boy , they boys . ";
string[] arrStr={ "boy ", "boys ", "female ", "gender "};
string s= " ";
for(int i=0;i <arrStr.Length;i++)
{
if(content.Contains(arrStr[i]))
s+=arrStr[i]+ ", ";
}
return s;
}
------解决方案--------------------你是想做搜索功能
搜索引擎一般如此实现
分词
把文章按词划分
索引
把词用数字代替
查索引
搜索数字索引
把结果转换成词
------解决方案--------------------写了个正则的方法
private string GetContainWords(string content, string[] array)
{
StringBuilder result = new StringBuilder();
StringBuilder sb = new StringBuilder( "(? <!\\w)( ");
foreach (string s in array)
{
sb.Append(s);
sb.Append( "| ");
}
string reg = sb.ToString().TrimEnd( '| ') + ")(?!\\w) ";
MatchCollection mc = Regex.Matches(content, reg, RegexOptions.IgnoreCase);
foreach (Match m in mc)
{
result.Append(m.Value);
result.Append( ", ");
}
return result.ToString().TrimEnd( ', ');
}
调用
string content = "I am a boy , they boys . ";
string[] arrStr =new string[]{ "boy ", "boys ", "female ", "gender " };
richTextBox2.Text = GetContainWords(content, arrStr);
效率上没有测,楼主可以试下