Python 基础笔记——正则

import re

元字符:

符号 描述
. 通配符,匹配除换行符外的所有字符,一次只能匹配一个字符
^ 匹配的字符必须在字符串开头
$ 匹配的字符必须在字符串结尾
* 匹配 * 前面的字符 0 或多次
+ 匹配 + 前面的字符 1 或多次
? 匹配?前面的字符 0 或 1 次
{} 匹配 {m,n} 前面的字符 m-n 次
[] 匹配 [] 中的某一个字符。在 [] 中,.(通配符) 将失去作用,^ 在 [] 里使用代表取反,反斜杠在 [] 中仍有特殊作用
\ 反斜杠后面跟元字符去除元字符特殊功能,后面跟普通字符实现特殊功能
\d 匹配任何 一个十进制数,相当于 [0-9]
\D 匹配任意一个非数字字符,相当于 [^0-9]
\s 匹配一个空白字符,等价于 [\t\n\r\f\v]
\S 匹配一个非空白字符,等价于 [^\t\n\r\f\v]
\w 匹配任意一个字母数字或下划线,等价于 [a-zA-Z0-9_]
\W 匹配除字母数字或下划线外的任意一个字符,等价于 [^a-zA-Z0-9_]
\b 匹配一个单词的边界,在需要匹配的单词两边放入 \b

re 模块中一些重要函数

函数 描述
compile(patern[, flags]) 根据包含正则表达式的字符串穿件模式对象
search(pattern, string[, flags]) 在字符串中寻找模式
match(pattern, string[, flags]) 在字符串的开始处匹配模式
split(pattern, string[, maxsplit=0]) 根据模式的匹配项来分割字符串
findall(pattern, string) 列出字符串中模式的所有匹配项
sub(pattern, replace, string[, count=0]) 将字符串中所有 pattern 的匹配项用 replace 替换
secape(string) 将字符串中所有特殊正则表达式字符转义

1、re.findall (pattern,string):查找匹配项,返回包含所有匹配项的列表,没有匹配项返回空列表。注:如果匹配项里有组,则会优先取出组里的匹配项,如果想取出完整匹配项则在组的开始加上?:(问号和冒号)

2、re.match (pattern,string [,flags]):从字符串开头进行匹配,成功返回 Match 对象,失败返回 None

3、re.search (pattern,string [,flags]):在 string 中匹配 pattern,成功返回 Match 对象,失败返回 None, 只返回第一个

注:flags 默认为 0,其它可选项:

re.I(大写 i) 使匹配对大小写不敏感

re.M 多行匹配,影响 ^ 和 $

re.S 使 .(通配符)匹配包括换行符在内的所有字符

4、re.sub (pat,repl,string [count=0]):将字符串中所有 pat 的匹配项用 repl 替换,count 参数代表替换次数

5、re.subn (pat,repl,string [count=0]):和 sub () 功能一样,不同的是此函数返回被替换次数

6、re.split (pattern,string [, maxsplit=0]):根据匹配项分割字符串,返回列表

7、re 匹配对象的方法:


>>> r = re.match(r'to\b\s(be)\b', s)

>>> r.group()

'to be'

>>> r.groups()

('be',)

>>> r = re.match(r'to\b\s(?P<key>be)\b', s)

>>> r.groupdict()

{'key': 'be'}

group ([group1,...]) 返回匹配到的字符串

groups () 返回匹配到的分组结果,以元组形式返回

groupdict () 以匹配到的分组结果作为值,以指定 key 作为键,以字典形式返回

start ([group]) 返回给定组匹配项的开始索引(默认为 0)

end ([group]) 返回给定组匹配项的结束索引加 1

span ([group]) 以元组形式返回一个组的 start 和 end

8、re.finditer ():匹配成功返回迭代器对象,可在 for 循环中使用 group () 等 re 匹配对象方法

本作品采用《CC 协议》,转载必须注明作者和本文链接