引言

记得几年前在做网页爬虫后的信息抽取时,针对网页源码中隐藏的要提取的信息,比如评论、用户信息等属性信息,直接利用HtmlParser得到。如此做倒是简单,不过利用的是网页的规范的tag标记。其实java中的正则表达式也可以用来实现这一功能。而且对于非tag的一些有规律的系列组合的字符串,正则表达式更能够发挥其卓越的功能。大学时候曾经就接触过正则表达式,不过只是略知皮毛。现在也无心学习,上面的链接网页有一个比较清晰的介绍可供参考。下面只是陈述一下自己在实验过程中利用正则表达式来进行模式匹配以抽取目标信息的尝试及一些简单发现。
捕获组
模式中用()来表示捕获组,并且根据圆括号从左到右来编号。一个给定的正则表达式完整部分编号为0,然后()从左到右分别从1开始计数。我们可以得到任意捕获组的内容,下面用一个例子来展示:
[java] 
public static void main(String[] args) {  
// TODO Auto-generated method stub  
String stmt = "xx[new Date('08/24/2013'), 9.39],[new Date('08/24/2013'), 9.39],";  
String regex = "\\[(.*?)\\],";  
Pattern p = Pattern.compile(regex);  
Matcher m = p.matcher(stmt);  
System.out.println(m.groupCount());  
while(m.find()){  
System.out.println(m.group(0));  
System.out.println(m.group(1));  
}  
}  
输出结果为:
[plain 
1  
[new Date('08/24/2013'), 9.39],  
new Date('08/24/2013'), 9.39  
[new Date('08/24/2013'), 9.39],  
new Date('08/24/2013'), 9.39  
根据这,我们可以看到整个的表达式为捕获组0,可以匹配输出符合整个表达式模式的串。而()里面的捕获组则得到相应的匹配内容。
量词
同样上面的代码,当我们将正则表达式中的?去掉后,输出结果为:
[plain] view plaincopy
1  
[new Date('08/24/2013'), 9.39],[new Date('08/24/2013'), 9.39],  
new Date('08/24/2013'), 9.39],[new Date('08/24/2013'), 9.39  
则发现匹配的是全局部分,也就是所谓的贪婪策略。这就是由于贪婪、勉强和侵占量词的不同。详情可以参考:http://www.java3z.com/cwbwebhome/article/article8/Regex/Java.Regex.Tutorial.html#reg5_3
因此,我个人认为如果用来信息抽取可能更多的用的是勉强量词。
嵌套模式?
假若我们抽取的模式里面包括很多频繁的子模式,是否能够用一个正则表达式来完成呢?比如针对上面的事例,如果将正则表达式修改为
[java] 
String stmt = "xx[[new Date('08/24/2013'), 9.39],[new Date('08/24/2013'), 9.39],];";  
String regex = "\\[(\\[(.*?)\\],)*\\];";  
Pattern p = Pattern.compile(regex);  
Matcher m = p.matcher(stmt);  
System.out.println(m.groupCount());  
while(m.find()){  
System.out.println(m.group());  
System.out.println(m.group(0));  
System.out.println(m.group(1));  
System.out.println(m.group(2));  
}  
目前还没有有效的办法获取最内层捕获组的匹配串,算是一个问题吧?虽然我们可以先用一个正则提取重复部分,然后再利用正则将其分解,一步不行吗?
Tips
1. .默认并不匹配所有的字符,例如换行空白的就不可以,这时候可以用Pattern p = Pattern.compile(regex,Pattern.DOTALL);来使其匹配所有

转载于:https://www.cnblogs.com/gisblogs/p/3956131.html

Java中正则表达式、模式匹配与信息抽取相关推荐

  1. 1000行代码徒手写正则表达式引擎【1】--JAVA中正则表达式的使用

    简介: 本文是系列博客的第一篇,主要讲解和分析正则表达式规则以及JAVA中原生正则表达式引擎的使用.在后续的文章中会涉及基于NFA的正则表达式引擎内部的工作原理,并在此基础上用1000行左右的JAVA ...

  2. Java中正则表达式的使用

    JAVA中正则表达式的使用 如果出现连续相同的要分割的字符,那么会出现空字符串 1.split方法 2.pattern类编译正则3.matches类匹配正则 public class RegexTes ...

  3. java中正则表达式的应用

    java中正则表达式的应用 判断功能 public boolean matches(String regex) 分割功能 public String[] split(String regex) 替换功 ...

  4. java 正则表达式 table_JavaEdge/Java/Java中正则表达式.md at master · VegTableBird/JavaEdge · GitHub...

    主要用到的是这两个类 - java.util.regex.Pattern - java.util.regex.Matcher. Pattern对应正则表达式,一个Pattern与一个String对象关 ...

  5. java中正则表达式以及Pattern和Matcher

    正则匹配 // 反斜杠 /t 间隔 ('/u0009') /n 换行 ('/u000A') /r 回车 ('/u000D') /d 数字 等价于[0-9] /D 非数字 等价于[^0-9] /s 空白 ...

  6. java中正则表达式,编译报错:Invalid escape sequence (valid ones are \b \t \n \f \r \ \' \\ )...

    转自:https://www.cnblogs.com/EasonJim/p/6561666.html 若出现:Invalid escape sequence (valid ones are  \b   ...

  7. Java 中正则表达式的经典用法总结——捕获组

    正则表达式常用功能:匹配.切割.替换.获取(从字符串中提取指定格式字符) [String类下的正则的使用] String 类中有几个常用的方法,会涉及到正则表达式.如下: //根据正则表达式regex ...

  8. Java中正则表达式的基本使用

    这里主要介绍的是Java中的正则类的基本使用.学了这些基本类的学习后,就可以查看更深入的正则规则. 学了本篇内容你就学习了Java正则的40%剩下的50%~60%需要读者查看API,学习更好的匹配规则 ...

  9. Java中正则表达式的学习

    正则表达式简介 正则表达式定义了字符串的模式,可以用来搜索.编辑和处理文本.正则表达式并不仅限于某一种语言. 官网地址:https://docs.oracle.com/javase/7/docs/ap ...

最新文章

  1. 2021最大看点AI for Science,在哪些领域有斩获?
  2. 我记录网站综合系统 -- 技术原理解析[10:PermissionChecker流程]
  3. java 100以内冒泡算法_Java俩种形式实现冒泡排序
  4. 手机版的python-手机版python
  5. QUIC 是如何解决TCP 性能瓶颈的?
  6. qt 16进制字符串和十六进制数_Python字符串类型及其操作
  7. ODataModel.submitBatch by default Asynchronous
  8. 基于Ocelot的gRpcHttp网关
  9. linux重定向到文件permission denied
  10. IBM PHP教程链接
  11. .netcore excel导出回车换行_必须掌握的回车键Enter应用技巧,100%干货
  12. 多表更新,用一个表更新另外一个表
  13. 16-微信小程序商城 购物车首页底部菜单(微信小程序商城开发、小程序毕业设计、小程序源代码)(黄菊华-微信小程序开发教程)
  14. 74ls20设计半加器_实验二++组合逻辑电路的设计与测试.ppt
  15. android4.04版本微信,微信旧版本6.3.27v6.3.27 老版本 Android
  16. MSP430F415IRTDR
  17. BetterScroll 2.0网络数据过慢,不能滚动问题
  18. CTF-reverse菜鸡想要走出菜狗设计的迷宫
  19. BeagleBone Black 从零到一 (2 MLO、U-Boot)_spl
  20. 新闻闲话:低龄儿童,如何快快乐乐学英语

热门文章

  1. C语言下取整下半个方括号,c语言易错知识点总结[工作范文](28页)-原创力文档...
  2. JS学习(this关键字)
  3. 海南小地图(echart)
  4. 你不可不知的HTML优化技巧
  5. 网站开发笔记【四】css hack技术
  6. 然后再带动更多的C++人逼起来
  7. 分享Silverlight/WPF/Windows Phone一周学习导读(8月22日-8月27日)
  8. 2010头号病毒追杀令——恶意下载者001
  9. 文档内容结构化技术探索
  10. Spring Boot 注解描述