python正则的使用

python 正则
创建于:2019年07月08日

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匹配对象的方法:

>>> s = 'to be or not to be'

>>> 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匹配对象方法