1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

Python正则表达re模块findall()函数详解

Python正则表达式:re.findall函数介绍

小编写这篇文章的主要目的,主要是给大家做一个解答,解答关于Python正则表达内容的一些相关介绍,正则表达式当中,主要是涉及到re模块方面的一些介绍,还有就是关于findall()函数的一些例子,那么,具体内容是什么呢?下面就给大家详细解答下。

Python正则表达re模块findall()函数详解

re.findall函数的两种表示形式

它在re.py中有定义: def findall(pattern,string,flags=0):

Return a list of all non-overlapping matches in the string.If one or more capturing groups are present in the pattern,return a list of groups;this will be a list of tuples if the pattern has more than one group.Empty matches are included in the result.

return _compile(pattern,flags).findall(string)  返回string中所有与pattern匹配的全部字符串,返回形式为数组。 

import re
kk=re.compile(r’\d+’)
kk.findall(‘one1two2three3four4’)
#[1,2,3,4]
#注意此处findall()的用法,可传两个参数;
kk=re.compile(r’\d+’)
re.findall(kk,”one123″)
#[1,2,3]

实例代码

后面会讲解代码里的各个部分,先列出来~

import re
str=’aabbabaabbaa’
#一个”.”就是匹配除\n(换行符)以外的任意一个字符
print(re.findall(r’a.b’,str))#[‘aab’,’aab’]
#*前面的字符出现0次或以上
print(re.findall(r’a*b’,str))#[‘aab’,’b’,’ab’,’aab’,’b’]
#贪婪,匹配从.*前面为开始到后面为结束的所有内容
print(re.findall(r’a.*b’,str))#[‘aabbabaabb’]
#非贪婪,遇到开始和结束就进行截取,因此截取多次符合的结果,中间没有字符也会被截取
print(re.findall(r’a.*?b’,str))#[‘aab’,’ab’,’aab’]
#非贪婪,与上面一样,只是与上面的相比多了一个括号,只保留括号的内容
print(re.findall(r’a(.*?)b’,str))#[‘a’,”,’a’]
str=”’aabbab
aabbaa
bb”’#后面多加了2个b
#没有把最后一个换行的aab算进来
print(re.findall(r’a.*?b’,str))#[‘aab’,’ab’,’aab’]
#re.S不会对\n进行中断
print(re.findall(r’a.*?b’,str,re.S))#[‘aab’,’ab’,’aab’,’aa\n b’]

re.findall中正则表达式(.*?)

字符串是 str=’aabbabaabbaa’ 

1.符号.就是匹配除\n(换行符)以外的任意一个字符 

print(re.findall(r’a.b’,str))#[‘aab’,’aab’]

2.符号*前面的字符出现0次或以上 

print(re.findall(r’a*b’,str))#[‘aab’,’b’,’ab’,’aab’,’b’]

3.符号.*贪婪,匹配从.*前面为开始到后面为结束的所有内容 

print(re.findall(r’a.*b’,str))#[‘aabbabaabb’]

4.符号.*非贪婪,遇到开始和结束就进行截取,因此截取多次符合的结果,中间没有字符也会被截取 

print(re.findall(r’a.*?b’,str))#[‘aab’,’ab’,’aab’]

5.符号(.*?)非贪婪,与上面一样,只是与上面的相比多了一个括号,只保留括号的内容 

print(re.findall(r’a(.*?)b’,str))#[‘a’,”,’a’]

关于带括号与不带括号的区别

import re
string=”abcdefg acbdgef abcdgfe cadbgfe”
#不带括号
regex=re.compile(“((\w+)\s+\w+)”)
print(regex.findall(string))
#输出:[(‘abcdefg acbdgef’,’abcdefg’),(‘abcdgfe cadbgfe’,’abcdgfe’)]
regex1=re.compile(“(\w+)\s+\w+”)
print(regex1.findall(string))
#输出:[‘abcdefg’,’abcdgfe’]
regex2=re.compile(“\w+\s+\w+”)
print(regex2.findall(string))
#输出:[‘abcdefg acbdgef’,’abcdgfe cadbgfe’] 

第一个regex中带有2个括号,其输出list中包含2个tuple 

第二个regex中带有1个括号,其输出内容是括号匹配到的内容,而不是整个表达式所匹配到的结果。 

第三个regex中不带括号,其输出的内容就是整个表达式所匹配到的内容。

实际上这并不是python特有的,这是正则所特有的,任何一门高级语言使用正则都满足这个特点:有括号时只能匹配到括号中的内容,没有括号【相当于在最外层增加了一个括号】。在正则里面”()”代表的是分组的意思,一个括号代表一个分组,你只能匹配到”()”中的内容。 

re.findall中参数re.S的意义

1.字符串变为(后面多加了2个b) 

str=’aabbab
aabbaa
bb’ 

2.参数无re.S,没有把最后一个换行的aab算进来 

print(re.findall(r’a.*?b’,str))#[‘aab’,’ab’,’aab’]

3.参数有re.S,不会对\n进行中断 

print(re.findall(r’a.*?b’,str,re.S))#[‘aab’,’ab’,’aab’,’aa\n b’]

综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来更多帮助。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/7249.html