正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串,将匹配的子串替换,或者从某个串中取出符合某个条件的子串等。
对于爬虫来说,有了它,从HTML里提取想要的信息就非常方便了。
爬虫程序能否成功运行,关键在于正则表达式的编写,但对于小白来说,正则表达式的知识很多,第一次接触肯定抓不住学习的重点,更谈不上应用了。
所以,在深入学习正则表达式之前,我们可以借助工具来测试我们的正则表达式是否与设想那样正确地匹配,今天就推荐我常用的两个网址。
1.一个正则表达式测试工具「http://tool.oschina.net/regex/」,这是开源中国提供的一个在线测试网址,输入待匹配的文本,然后选择常用的正则表达式,就可以得到相应的匹配结果了。
例如,这里输入待匹配的文本如下:
Hello,my phone numberis 010-86432100 and email is runningwbq@163.com.
这样字符串中包含了一个电话号码和一个电子邮件,接下来就尝试用正则表达式提取出来,如图所示
在网页右侧选择“Email地址”,就可以看到下方出现了文本中的Email。是不是很神奇?
2.当然,除了上面这个在线测试工具,还有一个「http://pythex.org/」,如图所示。
Pythex的使用非常简单,只要在「Yourregular expression」中输入我们设计的正则表达式,在「Your test string」中输入进行测试的匹配内容,它就会自动将匹配到的内容以高亮方式显示。
是不是这两个在线测试的工具对小白学习正则表达式来说很有用呀!
3.下面我把经常用到的匹配规则总结了一下
模式 | 描述 |
---|---|
\w | 匹配字母、数字及下划线 |
\W | 匹配不是字母、数字及下划线的字符 |
\s | 匹配任意空白字符,等价于[\t\n\r\f] |
\S | 匹配任意非空字符 |
\d | 匹配任意数字,等价于[0-9] |
\D | 匹配任意非数字的字符 |
\A | 匹配字符串开头 |
\Z | 匹配字符串结尾,如果存在换行,只匹配到换行前的结束字符串 |
\z | 匹配字符串结尾,如果存在换行,同时还会匹配换行符 |
\n | 匹配一个换行符 |
\t | 匹配一个制表符 |
^ | 匹配一行字符串的开头 |
$ | 匹配一行字符串的结尾 |
. | 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,就可以匹配包括换行符的任意字符 |
[…] | 用来表示一组字符,单独列出,比如[amk]匹配a、m、k |
[^…] | 不在[]中的字符,比如[^abc]匹配除了a、b、c之外的字符 |
* | 匹配0个或多个表达式 |
+ | 匹配1个或多个表达式 |
? | 匹配0个或1个前面的正则表达式定义的片段,非贪婪方式 |
{n} | 精确匹配n个前面的表达式 |
{n,m} | 匹配n到m次由前面正则表达式定义的片段,非贪婪方式 |
a|b | 匹配a或b |
() | 匹配括号内的表达式,也可以表示一个组 |
大家看完之后,是不是有点晕晕的,如果全记住也不可能,正则表达式这部分知识经常用,不知道那个字符什么意思,就来查表,多查几次,自然而然就会记住的,所以,后面我会分享一些正则表达式的实例,方便大家更好理解。
最后,正则表达式不是Python独有的,它也可以用在其他编程语言中,但是Python的re库提供了整个正则表达式的实现,利用这个库,可以在Python中使用正则表达式。