import re
re.match函数
match(pattern,string,flags=0)
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式
re.I :忽略大小写
re.L:做本地户识别
re.M:多行匹配,影响^和$
re.S:是.匹配包括换行符在内的所有字符
re.U:根据unicode字符集解析字符,影响\w \W \b \B
re.X:h使我们以更灵活的格式理解正则表达式
功能:尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,返回None
.span()找到位置
re.search函数
search(pattern,string,flags=0)
功能:扫描整个字符串并返回第一个匹配成功的
re.findall函数
findall(pattern,string,flags=0)
功能:扫描整个字符串,并返回结果列表
正则表达式的元字符
. :匹配除换行符以外的任意字符
[] :字符集合,表示匹配方括号中所包含的任意一个字符
[a-z]:匹配任意一个小写字母
[A-Z]:匹配任意一个大写字母
[0-9]:匹配任意一个数字
[0-9a-zA-Z]:匹配任意的数字和字母
[0-9a-zA-Z_]:匹配任意的数字和字母和下划线
[^]:匹配除了括号中以外的所有字符
\d:匹配数字,效果等同[0-9]
\D:匹配非数字字符,效果等同[^0-9]
\w:匹配数字,字母和下划线,效果等同[0-9-a-zA-Z_]
\W:匹配非数字,字母和下划线
\s:匹配任意的空白符(空格,换行,回车,换页,制表),效果同[ \f\n\r\t]
\S:匹配任意的非空白符
边界字符
^ :行首匹配,和在[]里的^不是一个意思
$:行尾匹配
\A:匹配字符串开始,它和^的区别是\A只匹配整个字符串的开头,即便在re.M模式下也不会匹配其他行的行首
\Z:匹配字符串结束,它和的区别是\A只匹配整个字符串的结束,即便在re.M模式下也不会匹配其他行的行尾
\b:匹配一个单词的边界,也就是值单词和空格之间的位置
\B:匹配非单词边界
(xyz):匹配小括号内的xyz(作为一个整体去匹配)
x?:匹配0个或者1个(非贪婪匹配)
x*:匹配0个或者任意多个x(贪婪匹配)
x+:匹配至少一个x(贪婪匹配)
x{n}:匹配确定的n个x(n是一个非负整数)
x{n,}:匹配至少n个x
x{n,m}:匹配至少n个最多m个x
x|y:匹配的是x或者y
*? +? ? 最小匹配,解决贪婪问题
re.split(r’ +’,str1) 以空格切割
re.finditer(pattern,string,flags=0):与findall类似,扫描整个字符串,返回的是一个迭代器
字符串的替换和修改
re.sub(pattern,repl,string,count,flags=0)
repl:指定的用来替换的字符串
count:最多替换的次数
功能:在目标字符串中以正则表达式的规则匹配字符串,再把他们替换成指定的字符串,可以指定替换的次数,如果不指定,替换所有的匹配字符串。
re.subn(pattern,repl,string,count,flags=0)
区别:前者返回一个被替换的字符串,后者返回一个元组,第一个元素被替换的字符串,第二个元素表示被替换的次数
分组:除了简单的判断是否匹配之外,正则表达式还有提取子串的功能,用()表示的就是分组
import re
str1='010-53424235'
m=re.match(r'(?P<first>\d{3})-(\d{8})',str1)
print(m)
print(m.group(1))
print(m.group(2))
print(m.group('first'))
print(m.groups())
编译:当我们使用正则表达式时,re模块会干两件事
1.编译正则表达式,如果正则表达式本身不合法,会报错
2.用编译后的正则表达式去匹配对象
re.compile(pattern,flags=0)
编译成正则对象
x=re.compile(正则表达式pattern)
x.match(匹配的字符串string)
match,search,findall,split(string,maxsplit=0),sub(repl,string,count=0,flags=0),subn(repl,string,count=0,flags=0)