正则表达式在网页课表抓取中的应用

2017-10-21 12:11申圣兵
科技风 2017年12期
关键词:字符串课表课程表

申圣兵

现在流行的校园类App如超级课程表、课程格子等都是以学生熟悉的课程表作为应用的切入点,受到了他们的喜爱。有些应用包含上千所学校的课表信息,这些学校的课表信息千差万别,正则表达式成了一个识别和解析它们的有力工具。

课表的信息来源一般是正方、青果等教务管理系统,它们一般都是以网页形式显示的,其中典型的网页课表源码格式如下:

计算机网络(A)

周二第1,2节{第315周|单周}

冯海林(冯海林)

教1609(多媒体)

它们一般包括课程名、星期、节次、周数、教师、教室等信息,相关类别信息以HTML标记

分隔,很容易使用JSoup等工具解析出来,比较复杂的地方主要是星期、节次等信息,它们往往是连在一起的,不容易分离,并且格式多样,因此,使用正则表达式解析这一部分内容成了课表解析的一个关键。

1 课表节次的一般格式

下面是一些常见的课表节次信息格式:

(1)周二第1,2节{第416周}二,1,2,4,16,null

(2){第210周|3节/周}null,null,null,2,10,3节/周

(3)周二第1,2节{第416周|双周}二,1,2,4,16,双周

(4)周二第1节{第416周}二,1,null,4,16,null

(5)周二第1节{第416周|双周}二,1,null,4,16,双周

这些包括了常见的课表节次格式,如果和以上的格式不符,那么就要自行修改正则表达式。

2 正则表达式的使用方法

现在以Java语言为例介绍正则表达式在高级语言中的使用方法。Java从JDK 1.40版本开始包含了java.util.regex包,这个包中包括了两个类:Pattern(模式类)和Matcher(匹配器类),一个Pattern对象就是一个正则表达式经编译后的表现模式,也就是前边所说的“模式编译器”;一个Matcher对象是一个状态机器,它根据Pattern对象作为匹配模式对字符串展开匹配检查,也就是“模式匹配器”。这里主要使用了Pattern类的compile方法及Matcher类的matches方法。它们的作用如下:

(1)compile(String regex)方法:将指定的正则表达式进行编译。

(2)matches()方法:判断整个字符序列与模式是否匹配。如果连续用Matcher对象检查多个字符串,可以使用reset方法重置匹配器,放弃其所有显式状态信息并将其添加位置设置为零。

课表正则表达式中使用了组,组在正则表达式中是一个非常重要的概念。组是用括号来划分正则表达式的,可以通过编号来引用组。组号从0开始,有几对小括号就表示有几个组,并且组可以嵌套,组号为0的表示整个表达式,组号为1的表示第一个组,依此类推。例如:A((B)C)(D)E正则式中有四组:组0是ABCDE,组1是BC,组2是B;组3是C,组4是D。

3 正则表达式在提取课表信息中的应用

下面我们以提取課程节次信息为例,看看正则表达式的灵活应用。

节次信息的正则表达式可写成:String reg = “周(.)第(\\d{1,2}),(\\d{1,2})节\\{第(\\d{1,2})(\\d{1,2})周\\|((.*周))\\}”;

String splitPattern = “

”;//设置课表分隔标记

String[] temp = sub.split(splitPattern);//将课表信息分离,存在字符串数组中,数组第二个为节次信息

Pattern pattern = Pattern.compile(reg);

Matcher matcher = pattern.matcher(temp[1]);

matcher.matches();

最终得到的课表格式如下图如示:

4 结语

现在流行的开发语言比如C#、VB、Java等等都提供了對正则表达式的直接支持,在很多领域得到了应用,由于正则表达式相对比较抽象,不容易理解,要精通它比较困难,但熟悉一些常用操作,对我们的工作还是有很大的帮助的。

参考文献:

[1]胡军伟.正则表达式在Web信息抽取中的应用.北京信息科技大学学报,2011.

[2]张静.正则表达式及其在信息抽取中的应用.电脑知识与技术,2009.

[3]唐惠丽.正则表达式的研究及在Web中的应用.计算机技术与发展,2013.

猜你喜欢
字符串课表课程表
学生出招解决”日课牌“问题
如果我是校长
INNO EDU 创新教育大会
一种基于PowerBuilder环境字符串相似度算法
SQL server 2008中的常见的字符串处理函数
倍增法之后缀数组解决重复子串的问题
课程表
最简单的排序算法(续)
各地区学生课表
做生意