正则匹配关键字(汉字或字母)所在的句子

波-仔 行圆汽车 学生  2013-02-21 10:50:57
大家好,我想了解怎么用正则匹配关键字(汉字或字母)所在的句子,举个例子便于大家理解:
我是中国人,我是中国人,我是中国人。我是中国人,我是中国人,我是中国人,我是中国人。
...全文
512 21 点赞 打赏 收藏 举报
写回复
21 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
沐心丶 2014-07-28
引用 10 楼 suciver 的回复:
根据楼主的需求在修改下

//根据你要的关键字和文章内容进行查找句子 
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; 
}
那如果是多个关键词 “a b c”之类的 用空格分开的应该如何匹配呢?循环?
  • 打赏
  • 举报
回复
侢見尒溡洸 2014-03-31
我需要在小说里找一些语言现象,然后归类。所以我一直在找有没有可以把关键字所在句子直接导出的软件,找了好久就发现CAJ阅读器倒是可以定位和计数,但就是不能导出,上千条句子,一条一条的复制黏贴得快崩溃了。看不太懂上面的帖子,所以我想问下楼主,可否教我一下?不胜感激啊
  • 打赏
  • 举报
回复
波-仔 2013-02-25
哦 了解了 ,谢谢大家。不管怎么说,问题解决了。
  • 打赏
  • 举报
回复
shine333 2013-02-24
没全看完,不过,绝对不需要,也不应该去除换行 正则表达式有个DOT_ALL模式,也就是.是否匹配换行符,默认关闭。 @see java.util.regex.Pattern#DOT_ALL
  • 打赏
  • 举报
回复
波-仔 2013-02-22
求一个能把所有html标签和script代码以及全部回车换行空格清空的正则表达式。 把一个网页的源文件非代码(除了文字间的标点符号)清空,只留下一行带标点的纯文本,那位大神能实现呢? 在线等
  • 打赏
  • 举报
回复
失落夏天 2013-02-21
匹配条件就是包括“帖子”这个汉字关键字,并且以"。"开,"。"结尾是吧? //正则提取 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; } 这样应该就可以了。
  • 打赏
  • 举报
回复
波-仔 2013-02-21
引用 1 楼 abc41106 的回复:
你举得例子反而让我更不理解了。。 可不可以描述详细一点?
比如在一篇文章里,我的关键字是“帖子”,那么我想把“帖子”所在的句子匹配出来。涉及到匹配逗号或句号的问题。
  • 打赏
  • 举报
回复
abc41106 2013-02-21
你举得例子反而让我更不理解了。。 可不可以描述详细一点?
  • 打赏
  • 举报
回复
波-仔 2013-02-21
你要是把{}花括号的内容也去掉呢?script的内容 在你的这个基础之上加
  • 打赏
  • 举报
回复
suciver 2013-02-21
content=content.replaceAll("<.*?>(.*?)</.*?>","");这个就是只去标签了啊
  • 打赏
  • 举报
回复
suciver 2013-02-21
引用 13 楼 xhbdownnet 的回复:
引用 12 楼 suciver 的回复: 引用 11 楼 xhbdownnet 的回复: 牛人 顶!另外遇到回车换行会不会影响匹配结果呢?比如一句话不再同一行?也要匹配。 还有HTML标签该怎么处理呢? 我那个不是已经把回车换行先去掉了吗,就是不在同一行我们整成同一行,免得后面麻烦,还有你说的html标签是什么意思,例如<span id="yyy" style="......">xx……
我上面不是写了只去标签保留内容吗
  • 打赏
  • 举报
回复
波-仔 2013-02-21
引用 12 楼 suciver 的回复:
引用 11 楼 xhbdownnet 的回复: 牛人 顶!另外遇到回车换行会不会影响匹配结果呢?比如一句话不再同一行?也要匹配。 还有HTML标签该怎么处理呢? 我那个不是已经把回车换行先去掉了吗,就是不在同一行我们整成同一行,免得后面麻烦,还有你说的html标签是什么意思,例如<span id="yyy" style="......">xxxx</span>元素中间的xxxx要不要呢……
“<span id="yyy" style="......">xxxx</span>”保留XXXX去掉外面的所有"<>"标签,包括 单标签
  • 打赏
  • 举报
回复
suciver 2013-02-21
引用 11 楼 xhbdownnet 的回复:
牛人 顶!另外遇到回车换行会不会影响匹配结果呢?比如一句话不再同一行?也要匹配。 还有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标签包起来的都去掉
  • 打赏
  • 举报
回复
波-仔 2013-02-21
牛人 顶!另外遇到回车换行会不会影响匹配结果呢?比如一句话不再同一行?也要匹配。 还有HTML标签该怎么处理呢?
  • 打赏
  • 举报
回复
suciver 2013-02-21
根据楼主的需求在修改下

//根据你要的关键字和文章内容进行查找句子 
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; 
}
  • 打赏
  • 举报
回复
波-仔 2013-02-21
引用 5 楼 suciver 的回复:
如果是标准的中文文章的话句子应该只以。结束 Java code ? 123456789 //根据你要的关键字和文章内容进行查找句子 public List<String> getStringByKeyWords(String keyWords,String content){ List<String> list=new ArrayList<String>()……
这是我调用你的代码产生的结果。
RegExpression ex=new RegExpression();
//		String s=ex.arr().toString();
//		System.out.println(s);
		List<String> str=ex.getStringByKeyWords("程序", "最后我们来看一个检验地址的例程。该程序是用来检验一个输入的EMAIL地址里所包含的字符是否合法。虽然这不是一个完整的EMAIL地址检验程序。它不能检验所有可能出现的情况。但在必要时您可以在其基础上增加所需功能。");
		System.out.println(str.toString());
[最后我们来看一个检验地址的例程。该程序是用来检验一个输入的EMAIL地址里所包含的字符是否合法, 虽然这不是一个完整的EMAIL地址检验程序]
  • 打赏
  • 举报
回复
abc41106 2013-02-21
引用 6 楼 xhbdownnet 的回复:
引用 4 楼 abc41106 的回复:引用 3 楼 AA5279AA 的回复: 匹配条件就是包括“帖子”这个汉字关键字,并且以"。"开,"。"结尾是吧? //正则提取 public static List<String> getContext2() { //String html="kk<p>123456</p>ssss"; String html="ss。k……
这个我就不知道了。。 或许可以用字符串替换啥的 等大神来解答吧。。
  • 打赏
  • 举报
回复
波-仔 2013-02-21
另外遇到回车换行会不会影响匹配结果呢?比如一句话不再同一行?也要匹配。
  • 打赏
  • 举报
回复
波-仔 2013-02-21
引用 4 楼 abc41106 的回复:
引用 3 楼 AA5279AA 的回复: 匹配条件就是包括“帖子”这个汉字关键字,并且以"。"开,"。"结尾是吧? //正则提取 public static List<String> getContext2() { //String html="kk<p>123456</p>ssss"; String html="ss。kk帖子。ss"; List<String> resultList……
顶楼上,两种方式我都做了测试,都可以实现,我在用复杂点的html代码源文件测一下。 还有个问题,我想把关键字变成红色怎么实现呢?
  • 打赏
  • 举报
回复
suciver 2013-02-21
如果是标准的中文文章的话句子应该只以。结束

//根据你要的关键字和文章内容进行查找句子
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;
}
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
Java
加入

4.8w+

社区成员

Java相关技术讨论
申请成为版主
帖子事件
创建了帖子
2013-02-21 10:50
社区公告
暂无公告