一、re.compile 函数(https://www.cnblogs.com/lzw121/p/6306698.html)
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
‘.’ 匹配所有字符
* 匹配前一个字符0或多次
+ 匹配前一个字符1次或无限次
? 匹配一个字符0次或1次
^ 匹配字符串开头。在多行模式中匹配每一行的开头
$ 匹配字符串末尾,在多行模式中匹配每一行的末尾。(例如,pattern='.+\.(css|img|js)$')
‘^’和’$’ 匹配字符串开头和结尾
‘/d’ 匹配数字
‘/D’ 匹配非数字
‘/w’ 匹配字母和数字
匹配所有的英文字母和数字,即等价于[a-zA-Z0-9]。
‘/W’ 匹配非英文字母和数字
即’/w’的补集,等价于[^a-zA-Z0-9]。
‘/s’ 匹配间隔符
即匹配空格符、制表符、回车符等表示分隔意义的字符,它等价于[ /t/r/n/f/v]。(注意最前面有个空格)
‘/S’ 匹配非间隔符
即间隔符的补集,等价于[^ /t/r/n/f/v]
‘/A’ 匹配字符串开头
匹配字符串的开头。它和’^’的区别是,’/A’只匹配整个字符串的开头,即使在’M’模式下,它也不会匹配其它行的很首。
‘/Z’ 匹配字符串结尾
匹配字符串的结尾。它和’$’的区别是,’/Z’只匹配整个字符串的结尾,即使在’M’模式下,它也不会匹配其它各行的行尾。
二、返回值(http://www.runoob.com/python/python-reg-expressions.html)
text = "XXX"
pattern = re.compile('XXX')
first_string = text.match('XXX').group() # 匹配第一个符合条件的对象,并用group()返回字符串。
all_strings = text.findall('XXX') # 找出所有符合条件的字符串,以数组形式打印。
pattern.sub("", text) # 替换text中符合条件内容为空字符串。
re.sub(pattern, "", text) # 替换text中符合条件内容为空字符串,返回字符串。
关于group作用:
当匹配成功时返回一个 Match 对象,然后:
group([group1, …])
方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用group()
或group(0)
;start([group])
方法用于获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认值为 0;end([group])
方法用于获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数默认值为 0;span([group])
方法返回(start(group), end(group))
。
看一个实例:
>>>import re
>>> pattern = re.compile(r'([a-z]+) ([a-z]+)', re.I) # re.I 表示忽略大小写
>>> m = pattern.match('Hello World Wide Web')
>>> print m # 匹配成功,返回一个 Match 对象
<_sre.SRE_Match object at 0x10bea83e8>
>>> m.group(0) # 返回匹配成功的整个子串
'Hello World'
>>> m.span(0) # 返回匹配成功的整个子串的索引
(0, 11)
>>> m.group(1) # 返回第一个分组匹配成功的子串
'Hello'
>>> m.span(1) # 返回第一个分组匹配成功的子串的索引
(0, 5)
>>> m.group(2) # 返回第二个分组匹配成功的子串
'World'
>>> m.span(2) # 返回第二个分组匹配成功的子串
(6, 11)
>>> m.groups() # 等价于 (m.group(1), m.group(2), ...)
('Hello', 'World')
>>> m.group(3) # 不存在第三个分组
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: no such group
三、特殊匹配速查(https://blog.csdn.net/u011665991/article/details/80221451)
(1)数字
数字:^[0-9]*$
n位的数字:^\d{n}$
至少n位的数字:^\d{n,}$
m-n位的数字:^\d{m,n}$
零和非零开头的数字:^(0|[1-9][0-9]*)$
(2)用户名邮箱等
由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
(3)日期
日期格式:^\d{4}-\d{1,2}-\d{1,2}
一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
(4)html标签
re_tag = re.compile('</?\w+[^>]*>') # HTML标签