正则表达式match(), search(), finall()的区别

Ivy ·
更新时间:2024-11-01
· 919 次阅读

揭秘match(), search(), finall()的区别,废话不多说,看代码

一、先看后解释

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列表中有一个数据 (.\*?)会尽量少的匹配,当它进行匹配的时候,发现字符串中有一个!就返回一个结果。 (.\*) 会尽量多的去匹配,必须匹配到最后一个!为止才会返回结果。
作者:6先生6



正则 match

需要 登录 后方可回复, 如果你还没有账号请 注册新账号