写一个方法,有两个参数,第一个参数content 是一个字符串, 第二参数是一个array, 字符串数组,存放的是一些关键字,方法最后返回一个string.如果
content="I am a boy , they boys .";
arrStr={"boy", "boys", "female", "gender"}使用正则表达式,要返回content包含的关键字(就是arrStr里面出现的) 格式是 return "boy,boys";
如何实现?

解决方案 »

  1.   

    一定要用正则吗,遍历用IndexOf似乎更好一些
      

  2.   

    使用哪种方法 速度会快一些呢?
    因为content 有时候会很大,有几千个, array也有几十个,用Indexof会不会慢一些呢?
      

  3.   

    与搜索有关吧?
    参考Lucene的实现原理吧简单的话就indexOf吧
      

  4.   


    使用哪种方法 速度会快一些呢?
    因为content 有时候会很大,有几千个, array也有几十个,用Indexof会不会慢一些呢?
      

  5.   

    正则不会,这样也可以解决:
       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;}
      

  6.   

    写了个正则的方法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);
    效率上没有测,楼主可以试下
      

  7.   

    感谢   lxcnn(过客) ,问题解决了.
      

  8.   

    再问一下, (?<!\\w) 和(?!\\w) 是什么意思, 有什么不同?
      

  9.   

    (?<!\\w) 反向预搜索,表示前面不是字母
    (?!\\w)  正向预搜索,表示后面不是字母
    这样做是为了限制所要提取的是独立的单词其实下面这样更好一些,只是当时写的时候出了点小差错,所以用了上面的写法,而没有用下面的
    private string GetContainWords(string content, string[] array)
    {
        StringBuilder result = new StringBuilder();
        StringBuilder sb = new StringBuilder("\\b(");
        foreach (string s in array)
        {
            sb.Append(s);
            sb.Append("|");
        }    string reg = sb.ToString().TrimEnd('|') + ")\\b";    MatchCollection mc = Regex.Matches(content, reg, RegexOptions.IgnoreCase);
        foreach (Match m in mc)
        {
            result.Append(m.Value);
            result.Append(",");
        }    return result.ToString().TrimEnd(',');
    }\b表示单词边界,也是为了限定提取部分为独立单词用的