1、介绍
这里整理了表达式,即pattern参数的语法。其本质是一个str类型。
2、开始和结尾
(1)^
- ^匹配字符串的开头
(2)$
- $匹配字符串的末尾
(3)整体匹配
- 同时使用^和$
3、匹配次数
(1)贪婪匹配和非贪婪匹配模式
- 贪婪匹配,在允许的范围内尽可能多的匹配表达式次数。比如*、+、{n, m}等
- 非贪婪匹配,在允许的范围内尽可能少的匹配表达式次数。使用?
(2)*
- 匹配0或任意多次表达式
(3)+
- 匹配至少1次表达式
(3)?
- 匹配0或1次表达式
- 这是非贪婪模式,即如果有匹配,只匹配1次
(4){n}
- 精确匹配n次表达式
(5){n,m}
- 匹配n-m范围内数目的表达式次数
- 如果是{n,}表示最少,{,m}表示最多
4、包含和不包含
(1)[]
- 表示匹配一个字符,其是在[和]之间的任意字符
- 在[]之内除了-字符,其他字符都是作为单个的匹配字符,表示其本身,包括.+*?等
(2)[^]
- 表示匹配一个字符,其是在[^和]之间的字符之外的任意字符
5、字符替代
(1)-
- 使用-可以将数字和字母进行很方便的范围指定,比如a-z,0-3,A-G
(2).
- .匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
- 注意,.字符在[]或[^]中时,仅表示.字符本身,即使此时设置为flags=re.DOTALL。实际上,这也是合理的,毕竟如果想要匹配所有字符,直接使用.且指定flags=re.DOTALL,替代[.]更有效。
- 如果不想指定flags,那么可以使用[\s\S]这样的操作
(3)\集合
\小写字母表示包含,\大写字母表示非,匹配的都是一个字符
- \w 匹配字母数字及下划线
- \W 匹配非字母数字及下划线
- \s 匹配任意空白符,等价于[ \t\n\r\f]
- \S 匹配任意非空白字符
- \d 匹配任意数字,等价于[0-9]
- \D 匹配任意非数字
(4)\转义字符
- \n 换行符
- \r
- \t 制表符
6、()
()可以定义表达式
- 如果没有(),那么*等操作的表达式是其前面的单独的字符(比如a)、转义字符(比如\n)等
- 而()可以定义一个表达式,在此基础上可以设置匹配次数等操作
()也可以作为分组,这需要使用的函数进行搭配
- 单匹配的match、fullmatch和search函数不支持分组,会匹配pattern表示的整体,并返回整体部分,作为re.Match类型对象。当然,调用re.Match类型对象的groups方法,可以进行分组操作
- findall函数支持分组
- 当pattern中不存在()时,是普通的匹配,将待匹配字符串中所有的匹配项作为list的直接元素
- 当pattern中存在一个()时,按照pattern进行匹配,但只将()中的范围作为list的直接元素
- 当pattern中存在不止一个()时,每一个pattern匹配的结果作为list的一个元素,类型是元组tuple(),而元组内的元素是pattern中各()定义的范围。其序列是先从外到内,然后从左到右包含在元组中。