re.match():从字符串的开始进行匹配
re.search():扫描整个字符串返回第一个匹配
re.findAll():返回所有匹配的字符串
Pattern 对象不能实例化,只能通过compile方法得到,匹配的模式有:
1).re.I(re.IGNORECASE): 忽略大小写
2).re.M(MULTILINE): 多行模式,改变'^'和'$'的行为
3).re.S(DOTALL): 点任意匹配模式,改变'.'的行为
4).re.L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
5).re.U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
6).re.X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释
\s 匹配空白字符、比如空格、tab、换行等
\b 匹配一个长度为0的字符串,但是仅仅在一个单词开始或结尾处匹配,这称为词边界快捷方式
\B 匹配的是不在单词开始或结束位置长度为0的子字符串
\w 与任意单词匹配
\d 与任意数字匹配
^正则表达式开始
$表示结束
.任意字符,它只能出现在方括号字符组以外
?可选字符,?字符指定一个字符、字符组或其他基本单元可选,期望出现零次或者一次
{N}重复
{M,N}M~N次
正则表达式中的分组
>>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
>>> m
<_sre.SRE_Match object; span=(0, 9), match='010-12345'>
>>> m.group(0) #group(0)永远表示原始字符串
'010-12345'
>>> m.group(1)
'010'
>>> m.group(2)
'12345'
贪婪匹配:正则表达式中默认是贪婪匹配,
>>> re.match(r'^(\d+)(0*)$', '102300').groups()
('102300', '')
非贪婪匹配后面➕?即可
re.match(r'^(\d+?)(0*)$', '102300').groups()
('1023', '00')
正则表达式的编译
当我们在Python中使用正则表达式时,re模块内部会干两件事情:
编译正则表达式,如果正则表达式的字符串本身不合法,会报错;
用编译后的正则表达式去匹配字符串。
如果一个正则表达式要重复使用几千次,出于效率的考虑,我们可以预编译该正则表达式,接下来重复使用时就不需要编译这个步骤了,直接匹配
>>> import re
# 编译:
>>> re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')
# 使用:
>>> re_telephone.match('010-12345').groups()
('010', '12345')
>>> re_telephone.match('010-8086').groups()
('010', '8086')
编译后生成Regular Expression对象,由于该对象自己包含了正则表达式,所以调用对应的方法时不用给出正则字符串
网友评论