Python 原创基础教程
第八章 正则表达式
基础
对字符串匹配的一套规则
1 | import re #正则表达式的包 |
compile()
编译正则表达式,返回一个正则表达式对象
findall()
找到字符串中所有的匹配(以空格为间隔)
search()
匹配整个字符串,直到找到一个匹配
match()
从开始匹配字符串是否符合正则表达式
split()
将匹配到的字符串当做分割点,对字符串进行分割,最终分割成列表
sub()
替换
字符串前缀
u/U:
表示unicode字符串
1.不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行unicode编码。
2.一般英文字符在使用各种编码下, 基本都可以正常解析, 所以一般不带u;但是中文, 必须表明所需编码, 否则一旦编码转换就会出现乱码。
3.建议所有编码方式采用utf8r/R:
非转义的原始字符串
1.与普通字符相比,其他相对特殊的字符,其中可能包含转义字符,即那些,\反斜杠加上对应字母,表示对应的特殊含义的,比如最常见的”\n”表示换行,”\t”表示Tab等。
2.而如果是以r开头,那么说明后面的字符,都是普通的字符了,即如果是“\n”那么表示一个反斜杠字符,一个字母n,而不是表示换行了。
3.以r开头的字符,常用于正则表达式,对应着re模块。b:
bytes
1.python3.x里默认的str是(py2.x里的)unicode,
2.bytes是(py2.x)的str, b”“前缀代表的就是bytes
3.python2.x里,b前缀没什么具体意义,只是为了兼容python3.x的这种写法
正则表达式表
- 字符
header 1 | header 2 |
---|---|
. | 任意字符 |
row 1 col 1 | row 1 col 2 |
row 2 col 1 | row 2 col 2 |
- 位置
位置 | - |
---|---|
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
- 预定义字符集
预定义字符 | - |
---|---|
\d | 数字:[0-9] |
\D | 非数字:[^\d] |
\w | 字母数字 |
\W | 非字母数字 |
- 数量词
数量词 | - |
---|
- | 匹配前一个字符0次或无限次
- | 匹配前一个字符1次或无限次
?| 匹配前一个字符0次或1次
{m}|匹配前一个字符m次
{m,n}|匹配前一个字符m至n次,m和n可以省略,上下界默认为0和无穷
- 括号
括号 | header 2 |
---|---|
() | 表示一个组,匹配结果缩小为()里面的组(不能匹配换行符) |
ex: | gr(a|e)y,匹配a或e |
[…] | 表示一个字符,ex:[akj]表示a或k或j |
[^…] | 表示不在里面的一个字符 |
{m} | 匹配前一个字符m次 |
{m,n} | 匹配前一个字符m至n次,m和n可以省略,上下界默认为0和无穷 |
特例
- .* 和 .*?
前者匹配结果重复最大的字符串,后者匹配结果重复 的最小字符串
1 | s = 'aabab' |
匹配反斜杆
需要4个反斜杆才能匹配1个反斜杆
匹配换行符
compile函数加参数re.DOTALL
((?:.|\n)*?)其中(?:.)是非捕获组