读书人

关于正则表达式的有关问题(100分)

发布时间: 2012-01-19 20:57:59 作者: rapoo

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


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

读书人网 >C#

热点推荐