正則表達式match(), search(), finall()的區別

揭祕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是世界上最美的語言!我愛你中國']

二、解釋

  1. 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是世界上最美的語言!我愛你中國!**
    
  2. search(),是僅返回第一個匹配 ,匹配到會返回一個對象,若匹配不到會返回一個None。
    舉例:

     str_search1 = re.search(r'世界(.*)!', str)
     匹配以'世界'開頭並且以‘!’,在str中存在的文字信息內容
     print(str_search1.group()) # 返回 世界上最美的語言!我愛你中國!
    
  3. findall(), 是返回所有匹配到的字符串,並以列表的形式進行返回,若沒有匹配到則返回空列表。
    舉例:

     str_findall1 = re.findall(r'(.*?)!', str)
     print(str_findall1) 返回 ['python是世界上最美的語言', '我愛你中國']
     列表形式進行返回!
    

    備註:findall(),只返回(.*)或者(.*?)中匹配的內容,返回的值中不包含外層匹配的文字內容

  4. (.*)和(.*?)的區別
    解釋:

     (.\*)是貪婪匹配,會盡量多匹配符合規則的內容信息
     (.\*?) 是非貪婪匹配,會盡量少的匹配符合規則的內容信息(可能說的太官方了)
     舉例:
     		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列表中有一個數據
     (.\*?)會盡量少的匹配,當它進行匹配的時候,發現字符串中有一個!就返回一個結果。
     (.\*) 會盡量多的去匹配,必須匹配到最後一個!爲止纔會返回結果。
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章