1,首先需导入模块importre。
2,在一串字符中,findall方法可以获取全部能够匹配的片段,并把结果放在一个列表中。
书写方式:
re.findall(正则表达式(规定匹配规则),被匹配的对象)。
3,使用findall方法匹配普通字符:
4,
一:
\d获取所有数字0-9,相当于[0-9]
\D获取所有非数字,相当于[^0-9]
二:
\w匹配所有单词字符,例如字母、数字、下划线、中文
\W匹配剩下的,空格、换行符、特殊字符等
5,字符集用[]中括号表示,匹配任意符合条件的字符。字符集内^表示非,例如[^0-9]表示不是0-9的元素都符合。
s='a_1a_2,a_3多了a_4没错#'#定义了s这个字符串re.findall('a_[13]',s)#字符集中有1和3,所以可以与s中的a_1和a_3进行匹配,如果存在则输出相应的值输出['a_1','a_3']re.findall('a_[^13]',s)#上三角^表示非,匹配s中a_加一个字符但不包括a_1和a_3的其他所有符合条件的字符输出['a_2','a_4']re.findall('a_[1-3]',s)#匹配a_(接下来字符在1到3之间的值都符合条件,包括1和3)输出['a_1','a_2','a_3']re.findall('[^a-zA-Z0-9_]',s)#匹配除了字母数字下划线的所有字符输出[',','','多','了','没','错','#']re.findall('[^\w]',s)#匹配所有不是\w包含的字符,即匹配\W输出[',','','#']6,
\s匹配空白字符:''空格、\n换行符、\t制表符、\r回车符
\S匹配任意非空白字符
7,
大括号{}中的数值用来标记要匹配字符的数量。
例:a_{3,6}表示a_后面要接3位到6位字符才符合条件
例:a_{3}表示a_后面要接3位字符才符合条件
贪婪模式:默认的,选取尽可能多的匹配字符,例如a_{3,6}尽量选取后接字符多的;
非贪婪模式:用?表示,即选取最少的匹配字符,a_{3,6}?就相当于a_{3}。
8,
匹配特殊数量的字符的符号:
*匹配任意数量的字符
?匹配0或1个字符,这也是它可以设置非贪婪模式的原因,被设置为最多匹配一个字符的贪婪模式。
匹配1个或多个字符
.匹配除换行符\n以外任意一个字符
提示:特殊数字符号控制的是紧挨着该符号左边的字符或字符集
s='hell#hello$helloo'#定义了s这个字符串re.findall('hello*',s)#从hello这个字符串的第一个字符开始匹配,*表示匹配任意个字符,所以输出的三个字符串都符合条件输出['hell','hello','helloo']re.findall('hello?',s)#❓表示匹配0或1个字符,所以下面三个输出都满足条件,但helloo只输出hello输出['hell','hello','hello']re.findall('hello',s)#因为表示匹配一个或多个字符,就是说匹配的条件是hello后面加字符可以,但不能hello少字符输出['hello','helloo']re.findall('he.','hello')#.匹配除换行符\n以外任意一个字符输出['hel']re.findall('he.','he\nllo')#.匹配除换行符\n以外任意一个字符输出[]9,
边界字符:
^表示在行的开始处进行匹配,例如^abc可以匹配abc000但不能匹配000abc,即匹配以abc开头的字符串;
$表示在行的末尾处开始匹配,例如abc$可以匹配000abc但不能匹配abc000,匹配以abc结尾的字符串。
s='anb09ui'#创建了s这个字符串re.findall('^anb',s)#匹配s是否以anb开头的['anb']re.findall('anb$',s)#匹配s是否以anb结尾的[]re.findall('ui$',s)#匹配s是否以ui结尾的['ui']re.findall('^ui',s)#匹配s是否以ui开头的[]10,
字符组:把任意数量的字符用小括号()
括起来,就是字符组,目的是为匹配成功的字符串进行分组。
findall
方法会匹配第一个参数的正则表达式并过滤掉字符组外面的字符,保留小括号内的部分。
s='你好Python\n'#创建了s这个字符串re.findall('\s*(\w)\s*',s)#因为\w无法匹配空格,所以结果是两个字符串['你好','Python']re.findall('\s*(.)\s*',s)['你好Python']11,
findall
方法还有第三个参数,模式参数。
两个较为常用的:re.I
忽略大小写,re.S
匹配空白字符。
多个模式参数用|
隔开。
s='hello\nWorld're.findall('Lo',s)#s中没有Lo[]re.findall('Lo',s,re.I)#re.I表示忽略大小写,所以匹配到lo['lo']re.findall('Lo.',s,re.I)#lo后面是换行符,而.不能匹配换行符[]re.findall('Lo.',s,re.I|re.S)#re.S匹配任意空白字符,包括换行符['lo\n']