正则表达式在网页课表抓取中的应用
2017-10-21申圣兵
申圣兵

现在流行的校园类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对象作为匹配模式对字符串展开匹配检查,也就是“模式匹配器”。……
