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

关于正则表达式的问题(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);


效率上没有测,楼主可以试下