正则表达式, 也叫规则表达式, 是强大的文本字符串处理工具, 通常用来验证, 查找, 筛选, 提取, 替换那些符合某个规则的文本字符串
1, 匹配规则
正则表达式的核心就是设计一个规则, 按照这个规则"按图索骥", 去寻找符合这个规则的字符串, 并将它按需处理
先以一个最简单的例子进行探索:
re
: 正则表达式模块findall
: 模块的一个方法, 传入 正则表达式 和 要去匹配字符串 将匹配结果以列表形式返回, 没有匹配结果返回空列表\d
: 定义的规则, 表示匹配任意一个 0~9 的数字198\d年
: 匹配符合 198某年
的字符串
然后按照规则去匹配字符串: '1988年 2000年 2020年 1980年'
# 导入模块 re
import re
# 按规则 r'198\d年' 匹配, r 的作用在 python 基础部分已介绍
re.findall(r'198\d年', '1988年 2000年 2020年 1980年')
['1988年', '1980年']
\d
是其中一个规则定义符, 可以和其他字符组合成正则表达式, 它自身也是一个正则表达式
而且任意一个字符都可以作为匹配它自身的正则表达式, 包括空字符''
, 只是要匹配规则定义符, 需要用 \
进行转义
re.findall('', 'a'), re.findall(r'\\d.+\[a]', r'a\d.+[a]')
(['', ''], ['\\d.+[a]'])
2, 常用规则定义符
2.01, 定义类别匹配
\w
匹配任意一个字母, 数字及下划线, \W
匹配任意一个非字母, 数字及下划线
a = r'my\wname'
b = r'my\Wname'
c = 'my1name, my_name, my.name, myaname'
re.findall(a, c), re.findall(b, c)
(['my1name', 'my_name', 'myaname'], ['my.name'])
\d
匹配任意一个 0~9 的数字, \D
匹配任意任意一个非数字
a = r'01\d-\D123'
b = '010-0123, 010-爱123, 01o-0123'
re.findall(a, b)
['010-爱123']
\s
匹配一个空白字符, \S
匹配一个非空白字符, 空白包括一个空格
, \f
分页符, \n
\r
换行符, \t
制表符, \v
纵向制表符
a = r'a\sb\Sc'
b = 'a b c, a bcc, a bcc'
re.findall(a, b)
['a bcc']
.
匹配除换行符 \r
\n
之外的任意一个字符
a = r'a.b'
b = '''a
b, a-b, a b, a b'''
re.findall(a, b)
['a-b', 'a b']