输入一句中文 比如:
"发帖咨询问题前,建议你搜索,看是不是已经有人解决了这个问题。"使用正则表达式,如何将 "问题" 这个词找出来, 如果有多个词呢, 比如要查出"问题","建议"
能不能一次查出来?

解决方案 »

  1.   

    string  content = "发帖咨询问题前,建议你搜索,看是不是已经有人解决了这个问题。"
    string[] array = {"问题","建议"};
    使用正则表达式,将content 包含的 array里面的关键字找出来.
    因为content有时候会很大,有几千个, 用正则表达式的话会快一些.
      

  2.   

    lxcnn(过客) 
    你上次帮我解决的问题, 如果字符串内容是英文的话就可以,因为单词都会用空格格开, 但是中文之间就没有空格,http://community.csdn.net/Expert/topic/5744/5744452.xml?temp=.5265619
      

  3.   

    这样还有点问题,也是像上次那个帖子里,返回一个用“,”分隔的字符串吗
    比如这个例子
    "发帖咨询问题前,建议你搜索,看是不是已经有人解决了这个问题。"
    这里有两个“问题”,一个“建议”,如果要返回的是“问题,建议”,而不是“问题,建议,问题”,用正则方法还要去下重复词,而用IndexOf,有多少个关键词就要遍历多少次,各有优缺点,效率上不好说,可能要根据数据源来判断
      

  4.   

    呵呵,如果只是这要求,那上次的代码稍稍改下就行了private string GetContainWords(string content, string[] array)
    {
        StringBuilder result = new StringBuilder();
        StringBuilder sb = new StringBuilder("(");
        foreach (string s in array)
        {
            sb.Append(s);
            sb.Append("|");
        }    string reg = sb.ToString().TrimEnd('|') + ")";    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 = "发帖咨询问题前,建议你搜索,看是不是已经有人解决了这个问题。";
    string[] arrStr = new string[] { "问题","建议" };
    richTextBox2.Text = GetContainWords(content, arrStr);输出:
    问题,建议,问题
      

  5.   

    能不能同时处理英文和中文呢?string content = "I am a boy , they  boys  boy123 !@#女性$%&*  男人女性. ";
    string[] arrStr = new string[] { "boy", "boys", 女性","男人" };content 里面的boy123不应该找出来的.
      

  6.   

    试下吧private string GetContainWords(string content, string[] array)
    {
        StringBuilder result = new StringBuilder();
        StringBuilder sb = new StringBuilder("(?<![a-z0-9])(");
        foreach (string s in array)
        {
            sb.Append(s);
            sb.Append("|");
        }    string reg = sb.ToString().TrimEnd('|') + ")(?![a-z0-9])";    MatchCollection mc = Regex.Matches(content, reg, RegexOptions.IgnoreCase);
        foreach (Match m in mc)
        {
            result.Append(m.Value);
            result.Append(",");
        }    return result.ToString().TrimEnd(',');
    }
      

  7.   

    谢谢lxcnn(过客)  前几天比较忙,今天结贴