正则表达式:
是一个字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配,
它的设计思想是用一种描述性的语言来给字符串定义一个滚则,凡是符合规则的字符串,我们就认为它“匹配了”,否则,该字符串就是“不合法的”。
在python中使用正则表达式导入,import re 模块
re的匹配语法有以下几种:
1、re.match 从头开始匹配
2、re.search 匹配包含
3、re.findall 把所有匹配到的字符放到以列表中的元素返回
4、re.split 以匹配到的字符当做列表分隔符
5、re.sub 匹配字符串替换
6、re.fullmacth 全部匹配
re模块常用表达式的规则
“. ”:默认匹配除\n以外的任意一个字符,若指定 flags DOTALL,则匹配任意字符,包括换行。
“^”:匹配字符开头,若指定 flags MULTLINE,这种也可以匹配上(r"^a","\nabc\neee",flags = re.MULTLINE)
“$”:匹配字符结尾,若指定 flags MULTLINE,re.search('foo.$','foo1\nfoo2\n',re.MULTLINE).group()会匹配到foo1
“*”:匹配*号前的字符0次或多次,re.search('a*','aaaabac')结果'aaaa'
“+”:匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba")结果['ab','abb']
“?”:匹配前一个字符1次或0次,re.search('b?','alex').group()匹配b 0次
“{m}”:匹配前一个字符m次,re.search('b{3}','alexbbbs').group()匹配到'bbb'
“{n,m}”:匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb")结果'abb','ab','abb'
“|”:匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group()结果'ABC'
“(...)”:分组匹配,re.search("(abc){2}a(123|45)","abcabca456c").group()结果为'abcabca45'
“\A”:只从字符开头匹配,re.search("\Aabc","alexabc")是匹配不到的,相当于re.match('abc',"alexabc")或^
“\Z”:匹配字符结尾,同$
“\d”:匹配数字0-9
“\D”:匹配非数字
“\w”:匹配[A-Za-z0-9]
“\W”:匹配非[A-Za-z0-9]
“\s”:匹配空白字符、\t、\n、\r、,re.search("\s+","ab\tc1\n3").group()结果'\t'
“(?P<name>...)”:分组匹配:re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","652322199103304014").groupdict("city")结果{'province':'6523','city':'22','birthday':'1991'}
注:匹配模式有两种
1、贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。
2、非贪婪匹配:就是匹配到结果就好,就少的匹配字符。