日期:2014-05-20  浏览次数:20780 次

正则匹配关键字(汉字或字母)所在的句子
大家好,我想了解怎么用正则匹配关键字(汉字或字母)所在的句子,举个例子便于大家理解:
   我是中国人,我是中国人,我是中国人。我是中国人,我是中国人,我是中国人,我是中国人。
Java 正则表达式?

------解决方案--------------------
你举得例子反而让我更不理解了。。
可不可以描述详细一点?
------解决方案--------------------
匹配条件就是包括“帖子”这个汉字关键字,并且以"。"开,"。"结尾是吧?
//正则提取
public static List<String> getContext2() {
//String html="kk<p>123456</p>ssss";
String html="ss。kk帖子。ss";
List<String> resultList = new ArrayList<String>();
        Pattern p = Pattern.compile("。(.*?)。");//匹配<p>开头,</p>结尾的文档
        Matcher m = p.matcher(html );//开始编译
        while (m.find()) {
         String str=m.group(1);
         if(str.contains("帖子")){
         resultList.add(str);//获取被匹配的部分
         }
        }
        return resultList;
    }
这样应该就可以了。
------解决方案--------------------
如果是标准的中文文章的话句子应该只以。结束

//根据你要的关键字和文章内容进行查找句子
public List<String> getStringByKeyWords(String keyWords,String content){
    List<String> list=new ArrayList<String>();
    Matcher m=Pattern.compile("(.*?"+keyWords+".*?)。").matcher(content);
    while(m.find())
        list.add(m.group(1));
    return list;
}

------解决方案--------------------
根据楼主的需求在修改下

//根据你要的关键字和文章内容进行查找句子 
public static List<String> getStringByKeyWords(String keyWords,String content){ 
    List<String> list=new ArrayList<String>(); 
    content=content.replaceAll("[\r\n]+","");//先把文章中出现换行的先去掉
    Matcher m=Pattern.compile("([^。]*?"+keyWords+".*?)。").matcher(content); 
    while(m.find()) 
        list.add(m.group(1)); 
    return list; 
}

------解决方案--------------------
引用:
牛人  顶!另外遇到回车换行会不会影响匹配结果呢?比如一句话不再同一行?也要匹配。

还有HTML标签该怎么处理呢?

我那个不是已经把回车换行先去掉了吗,就是不在同一行我们整成同一行,免得后面麻烦,还有你说的html标签是什么意思,例如<span id="yyy" style="......">xxxx</span>元素中间的xxxx要不要呢,
content=content.replaceAll("[\r\n]+","");//先把文章中出现换行的先去掉
如果只是<span id="yyy" style="......">和</span>不要就去掉
content=content.replaceAll("<.*?(/?)>
------解决方案--------------------
</.*?>","");//再把文章中的只去标签的部分包括标签属性,标签属性有可能是<img ..../>这样的
如果是<span id="yyy" style="......">xxxx</span>全不要就去掉
content=content.replaceAll("<.*?>(.*?)</.*?>","");//再把文章中有html标签包起来的都去掉