正則表達式
import re
result = re.match("\w{4,20}@163\.com$","[email protected]")
if result:
print("match success!")
print("match content:", result.group())
else:
print("math fail!")
-
分組 |
import re result = re.match("^[0-9][0-9]$|^100$","77") #正則表達式匹配0~100之間的數字 |左右任意一個滿足即可匹配 if result: print("match success!") print("match content:", result.group()) else: print("math fail!")
-
整體()
(abc)將括號中的字符作爲一個整體進行匹配分組
分組從1開始計數,第一個小括號爲組1
\w{4,20}@(163|126|qq|sina)\.com$ #匹配各種郵箱
提取區號和電話號碼
import re result = re.match("(\d{3,4})-(\d{7,8})","023-12345678") if result: print("match success!") print("區號:", result.group(1)) #分組 print("電話號碼:", result.group(2)) # 分組 else: print("math fail!")
-
引用分組 \
注意轉義字符
import re result = re.match("<([a-zA-Z0-9]+)><([a-zA-Z0-9]+)>.*</\\2></\\1>","<div><h1>this is a string</h1></div>") #引用第一個分組,表示與第一組內容一致 \是轉義字符 if result: print("match success!") print("match content:", result.group()) else: print("math fail!")
-
分組起別名(?P<name>)
-
分組引用別名(?P=name)
import re result = re.match("<(?P<name1>[a-zA-Z0-9]+)><(?P<name2>[a-zA-Z0-9]+)>.*</(?P=name2)></(?P=name1)>","<div><h1>this is a string</h1></div>") #引用第一個分組,表示與第一組內容一致 \是轉義字符 if result: print("match success!") print("match content:", result.group()) else: print("math fail!")
-
re.findall()
返回滿足正則條件的所有內容,是一個列表
import re result = re.findall("\d+","閱讀次數999,轉發次數888,評論次數777") #返回一個列表 if result: print("match success!") print("match content:", result) else: print("math fail!")
-
re.search()
找到第一個匹配即返回 類似find函數
-
re.match()
從字符串0號位置開始匹配,如果0號位置不滿足即返回失敗 即使從1號位可以匹配也是匹配失敗
-
re.sub()
用一個新的字符串替換原來內容中滿足正則表達式的內容
import re result = re.sub("\d+","1000","閱讀次數999,轉發次數888,評論次數777") # 把字符串中所有的正則替換爲1000,返回替換後的內容 if result: print("match success!") print("match content:", result) else: print("math fail!")
-
re.split()
分割內容
import re result = re.split(":| ","info:[email protected] tom jerry") if result: print("match success!") print("match content:", result) else: print("math fail!")
python默認是貪婪匹配,即總是嘗試匹配儘可能多的字符
在+ * {} ?
後面加?
變成非貪婪,即只匹配一次就結束
獲取電影天堂的電影
r.encoding = 'utf-8'
import re
import requests
def get_url(url):
try:
kv = {"user-agent":"Mozilla/5.0"}
r = requests.get(url,headers=kv)
r.raise_for_status()
r.encoding = 'gb2312'
demo = r.text
links = re.findall("ulink\">(.*?)</a>", demo)
for link in links:
print(link)
except Exception as e:
print(e)
if __name__ == '__main__':
head = "https://www.ygdy8.net/"
url = "https://www.ygdy8.net/html/gndy/dyzz/list_23_2.html"
get_url(url)