一、先看后解释
import re
str = 'python是世界上最美的语言!我爱你中国!'
# match的使用
str_match1 = re.match(r'世界(.*)!', str)
print(str_match1) # 结果返回None
str_match2 = re.match(r'python(.*)!', str)
print(str_match2.span()) # 返回(0, 22)
print(str_match2.group()) # 返回 python是世界上最美的语言!我爱你中国!
# search的使用
str_search1 = re.search(r'世界(.*)!', str)
print(str_search1.group()) # 返回 世界上最美的语言!我爱你中国!
# search(.*?)的使用对比
str_search2 = re.search(r'世界(.*?)!', str)
print(str_search2.group()) # 返回 世界上最美的语言!
# finall()的使用
str_findall1 = re.findall(r'(.*?)!', str)
print(str_findall1) # 返回 ['python是世界上最美的语言', '我爱你中国']
str_findall2 = re.findall(r'(.*)!', str)
print(str_findall2) # 返回 ['python是世界上最美的语言!我爱你中国']
二、解释
math(),是从头进行匹配,匹配到返回一个对象,若匹配不到返回None。
举例:
str = 'python是**世界**上最美的语言!我爱你中国!'
str_match1 = re.match(r'**世界**(.*)!', str)
**世界**并不是str开头的字符串,所以用match匹配不到,所以str_match1返回了**None**
str_match2 = re.match(r'**python**(.*)!', str)
print(str_match2.group())
**python**是str开头的字符串且有字符串内含有感叹号,故可以进行匹配操作
匹配后返回的是一个对象格式,如果想取出对象对应的数据需要用group()这个方法
str_match2.group(),最后得到匹配的字符串是: **python是世界上最美的语言!我爱你中国!**
search(),是仅返回第一个匹配 ,匹配到会返回一个对象,若匹配不到会返回一个None。
举例:
str_search1 = re.search(r'世界(.*)!', str)
匹配以'世界'开头并且以‘!’,在str中存在的文字信息内容
print(str_search1.group()) # 返回 世界上最美的语言!我爱你中国!
findall(), 是返回所有匹配到的字符串,并以列表的形式进行返回,若没有匹配到则返回空列表。
举例:
str_findall1 = re.findall(r'(.*?)!', str)
print(str_findall1) 返回 ['python是世界上最美的语言', '我爱你中国']
列表形式进行返回!
备注:findall(),只返回(.*)或者(.*?)中匹配的内容,返回的值中不包含外层匹配的文字内容
(.*)和(.*?)的区别
解释:
(.\*)是贪婪匹配,会尽量多匹配符合规则的内容信息
(.\*?) 是非贪婪匹配,会尽量少的匹配符合规则的内容信息(可能说的太官方了)
举例:
str_findall1 = re.findall(r'(.*?)!', str)
print(str_findall1) # 返回 ['python是世界上最美的语言', '我爱你中国']
str_findall2 = re.findall(r'(.*)!', str)
print(str_findall2) # 返回 ['python是世界上最美的语言!我爱你中国']
这个匹配规则是 匹配str这个字符串中所有以 ‘!’结尾的内容,返回两个内容确不相同
str_findall1 列表中有两个数据,str_findall2列表中有一个数据
(.\*?)会尽量少的匹配,当它进行匹配的时候,发现字符串中有一个!就返回一个结果。
(.\*) 会尽量多的去匹配,必须匹配到最后一个!为止才会返回结果。