re.match 和 re.search
re.match 函數(shù)
語法:
re.match(pattern, string, flags=0)
re.match 嘗試從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match() 就返回 none。
re.search 函數(shù)
語法:
re.search(pattern, string, flags=0)
re.search 掃描整個字符串并返回第一個成功的匹配。
re.match 和 re.search 的參數(shù),基本一致的,具體描述如下:
參數(shù)? | 描述 |
pattern? | 匹配的正則表達式 |
string | 要匹配的字符串 |
flags? | 標志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫 |
那么它們之間有什么區(qū)別呢?
re.match 只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數(shù)返回 None;而 re.search 匹配整個字符串,直到找到一個匹配。這就是它們之間的區(qū)別了。
re.match 和 re.search 在網(wǎng)上有很多詳細的介紹了,可是再個人的使用中,還是喜歡使用 re.findall
看下下面的實例,可以對比下 re.search 和 re.findall 的區(qū)別,還有多分組的使用。具體看下注釋,對比一下輸出的結果:
示例:
#!/usr/bin/env python3 # -*- coding: UTF-8 -*- # 提取圖片的地址 import re a = '<img src="https://s-media-cache-ak0.pinimg.com/originals/a8/c4/9e/a8c49ef606e0e1f3ee39a7b219b5c05e.jpg">' # 使用 re.search search = re.search('<img src="(.*)">', a) # group(0) 是一個完整的分組 print(search.group(0)) print(search.group(1)) # 使用 re.findall findall = re.findall('<img src="(.*)">', a) print(findall) # 多個分組的使用(比如我們需要提取 img 字段和圖片地址字段) re_search = re.search('<(.*) src="(.*)">', a) # 打印 img print(re_search.group(1)) # 打印圖片地址 print(re_search.group(2)) # 打印 img 和圖片地址,以元祖的形式 print(re_search.group(1, 2)) # 或者使用 groups print(re_search.groups())
輸出的結果:
<img src="https://s-media-cache-ak0.pinimg.com/originals/a8/c4/9e/a8c49ef606e0e1f3ee39a7b219b5c05e.jpg"> https://s-media-cache-ak0.pinimg.com/originals/a8/c4/9e/a8c49ef606e0e1f3ee39a7b219b5c05e.jpg ['https://s-media-cache-ak0.pinimg.com/originals/a8/c4/9e/a8c49ef606e0e1f3ee39a7b219b5c05e.jpg'] img https://s-media-cache-ak0.pinimg.com/originals/a8/c4/9e/a8c49ef606e0e1f3ee39a7b219b5c05e.jpg ('img', 'https://s-media-cache-ak0.pinimg.com/originals/a8/c4/9e/a8c49ef606e0e1f3ee39a7b219b5c05e.jpg') ('img', 'https://s-media-cache-ak0.pinimg.com/originals/a8/c4/9e/a8c49ef606e0e1f3ee39a7b219b5c05e.jpg')
最后,正則表達式是非常厲害的工具,通??梢杂脕斫鉀Q字符串內(nèi)置函數(shù)無法解決的問題,而且正則表達式大部分語言都是有的。python 的用途很多,但在爬蟲和數(shù)據(jù)分析這連個模塊中都是離不開正則表達式的。所以正則表達式對于學習 Python 來說,真的很重要。最后,附送一些常用的正則表達式和正則表達式和 Python 支持的正則表達式元字符和語法文檔。