Python中的re.search(),re.findall()和re.match()的使用和区别

1.区别

re.findall()的概念就是从字符串中匹配所有要查找的字符串出来,并输出为格式列表
re.match()则是查找字符串中起始位置是否为要查看的字符串,如果匹配成功则返回一个match object的对象,其中包含了匹配到的字符串的其实位置和字符串本身。如果在起始位置没有匹配到对应的字符串则返回None
re.search()则是查找整个字符串,并返回第一个匹配到的对象。它和re.match的区别在于即便匹配到的对象不在起始位置,也会返回。如果整个字符串都没有匹配到结果则返回None

2.代码示例

如下代码:
给出了一个字符串,其中hello子串后面的标点有所区别,用于不同的匹配

import re

str = 'hello wolrd!hello,    hello!  everything'

match1 = re.findall('hello', str)
match2 = re.match('hello', str)
match3 = re.match('hello!,', str)
match4 = re.search('hello!', str)
print(match1)
print(match2)
print(match3)
print(match4)

下面是结果:
第一个findall()的结果可以看到,字符串中的所有“hello”都被找到了,并一起存在列表中
第二个match的结果可以看到在起始位置匹配到了“hello”子串,返回一个match的对象
第三个match的结果可以看到,在起始位置没有匹配到“hello!”子串,所以返回为None
第四个search的结果可以看到,match没有匹配到的结果,在search中匹配到了,即search不会限制匹配的子串一定要在起始位置出现

['hello', 'hello', 'hello']
.Match object; span=(0, 5), match='hello'>
None
.Match object; span=(22, 28), match='hello!'>

3.注意点

match()和search()都只会返回一个结果,比如一个字符串为"jingle bells, jingle bells, jingle all the way",可以看到"jingle"字符在其中出现了三次,但是使用search()函数匹配的时候也只会返回第一个"jingle"出现的位置信息组成的对象:

import re

str_jingle = 'jingle bells, jingle bells, jingle all the way'
match4 = re.search('jingle', str_jingle)
print(match4)

结果:

.Match object; span=(0, 6), match='jingle'>

你可能感兴趣的:(python,开发语言)