标准库re的介绍
引言:正则表达式在处理爬虫和数据分析等任务时使用十分频繁,所以掌握这个标准库是十分必要的。
Python提供了一个正则表达式的标准库re,这个模块的正则表达式匹配操作与 Perl语言类似。
由于re是标准库,所以不需要额外安装。在使用之前须先引入该模块:
import re
正则表达式使用的匹配字符串类型
模式和被搜索的字符串既可以是Unicode字符串(str),也可以是8位字节串 (bytes)。 但是,Unicode字符串与8位字节串不能混用:也就是说,你不能用一个字节串模式去匹配Unicode字符串,反之亦然;类似地,当进行替换操作时,替换字符串的类型也必须与所用的模式和搜索字符串的类型一致。
反斜杠"\"和原始字符串表示法
正则表达式使用反斜杠('\')来表示特殊形式,或者把特殊字符转义成普通字符。 而反斜杠在普通的 Python 字符串里也有相同的作用,所以就产生了冲突。比如说,要匹配一个字面上的反斜杠,正则表达式模式不得不写成 '\\\\',因为正则表达式里匹配一个反斜杠必须是 \\ ,而每个反斜杠在普通的 Python 字符串里都要写成 \\ 。
解决办法是对于正则表达式样式使用Python的原始字符串表示法;在带有 'r' 前缀的字符串字面值中,反斜杠不必做任何特殊处理。 因此 r"\n" 表示包含 '\' 和 'n'两个字符的字符串,而"\n"则表示只包含一个换行符的字符串。样式在Python代码中通常都会使用这种原始字符串表示法来表示。
正则表达式的语法
正则表达式语法由字符和操作符构成,其常用操作符如下:
.——表示任何单个字符。
[]——字符集,对单个字符给出取值范围。如[abc]表示a、b、c中的任意一个。
[^]——非字符集,对单个字符给出排除范围。如[^abc]表示除a、b、c以外的其它字符。
*——前一个字符0次或无限次扩展。如abc*表示ab、abc、abcc、abccc等。
+——前一个字符1次或无限次扩展。abc+表示abc、abc、abccc等。
?——前一个字符0次或1次扩展。如abc?表示ab、abc两种情况。
|——表示左右表达式中的任意一个。如abc|def表示abc、def。
{m}——将前面的一个字符扩展m次。如ab{2}c表示abbc。
{m,n}——扩展前一个字符m至n次(含n)。如ab{1,2}c表示abc、abbc。
注意:<font face="楷体">{m,n}中,m和n之间不能有空格!!!</font>
^——匹配字符串开头。如^abc表示以abc为开头的字符串。
表示以abc为结尾的字符串。
()——分组标记,内部只能使用|操作符。如(abc)表示abc,(abc|def)表示abc、def。
\d——数字集合,等价于[0-9]。
\w(注意是小写w)——匹配任意字母、数字及下划线,等价于[a-zA-Z0-9_]。
经典正则表达式实例
^[A-Za-z]+$:由26个大小字母组成的字符串。
^[A-Za-z0-9]+$:由26个字母和数字组成的字符串。
^-?\d+$:整数形式的字符串。注意,带一个负号。
^[1-9]*[1-9][0-9]*$:正整数形式的字符串。
\d{3}-\d{8}:国内电话号码,如020-12345678。
[1-9]\d{5}:中国境内邮政编码,不以0开头的6位数字。
[\u4e00-\u9fa5]:匹配中文字符,此为UTF-8字符集的内容。
To be continued.