python之正規表示式
1.正規表示式的大致匹配過程是:依次拿出表示式和文字中的字元比較,如果每乙個字元都能匹配,則匹配成功;一旦有匹配不成功的字元則匹配失敗,具體如下圖:
1.1 貪婪模式與非貪婪模式
正規表示式通常用於在文字中查詢匹配的字串。python裡數量詞預設是貪婪的(在少數語言裡也可能是預設非貪婪),總是嘗試匹配盡可能多的字元;非貪婪的則相反,總是嘗試匹配盡可能少的字元。例如:正規表示式"ab*"如果用於查詢"abbbc",將找到"abbb"。而如果使用非貪婪的數量詞"ab*?",將找到"a"。
1.2 反斜線
與大多數程式語言相同,正規表示式裡使用"\"作為轉義字元,這就可能造成反斜槓困擾。假如你需要匹配文字中的字元"\",那麼使用程式語言表示的正規表示式裡將需要4個反斜槓"\\\\":前兩個和後兩個分別用於在程式語言裡轉義成反斜槓,轉換成兩個反斜槓後再在正規表示式裡轉義成乙個反斜槓。python裡的原生字串很好地解決了這個問題,這個例子中的正規表示式可以使用r"\\"表示。同樣,匹配乙個數字的"\\d"可以寫成r"\d"。有了原生字串,你再也不用擔心是不是漏寫了反斜槓,寫出來的表示式也更直觀。
1.3 檢測匹配是否正確
當我們不知道自己匹配的正則是否正確時可以登陸**:
檢測,只需要把需要匹配的**拷貝進來,然後自行寫入匹配原則,**就會自動顯示匹配是否成功
2.re模組
re模組是python中處理正規表示式的乙個模組,通過re模組的方法,把正規表示式pattern編譯成正則物件,以便使用正則物件的方法。那為什麼要使用re模組來把正規表示式搞成正則物件呢,最主要的是可以提高**的執行效率,我們來看個例子:
#!/usr/bin/env python
# -*- coding:utf8 -*-
# @time : 2017/11/14 9:36
# @author : hantong
# @file : regex1.py
import timeit
print timeit.timeit(setup='''import re; reg = re.compile('.*')''', stmt='''reg.match('')''', number=1000000)
print timeit.timeit(setup='''import re''', stmt='''re.match('.*', '')''', number=1000000)
執行結果:
1.2734959402
2.99342720664
注:綜上可以看出把正則表示成正則物件效率會高很多。
#!/usr/bin/env python
# -*- coding:utf8 -*-
# @time : 2017/11/14 9:36
# @author : hantong
# @file : regex1.py
import re
reg = re.compile(r'abc.*')
print(type(reg))
#可以看到這個型別是乙個正則物件
print(reg)
執行結果
#!/usr/bin/env python
# -*- coding:utf8 -*-
# @time : 2018/5/2 21:10
# @author : hantong
# @file : 20180502_test.py
import re
import requests
url = ""
session = requests.session()
r = session.get(url)
html = r.text
# print(html)
reg = re.compile(r"\"skuid\":\"(\d+)\",\s+\"\s+\s+\"skuurl\"\s+\s+\"skuimgurl\":\"(\s+)\",")
result = reg.findall(html)
print(result)
<_sre.sre_pattern object at>
利用正則匹配京東頁面資訊,獲取商品編號和對應商品
#!/usr/bin/env python
# -*- coding:utf8 -*-
# @time : 2018/5/2 21:10
# @author : hantong
# @file : 20180502_test.py
import re
import requests
url = ""
session = requests.session()
r = session.get(url)
html = r.text
# print(html)
reg = re.compile(r"\"skuid\":\"(\d+)\",\s+\"\s+\s+\"skuurl\"\s+\s+\"skuimgurl\":\"(\s+)\",")
result = reg.findall(html)
print(result)
Python之正規表示式
正規表示式正規表示式主要用來匹配字串,例如 判斷乙個字串是否是乙個合法的 思想是用描述性的語言給字串乙個規則。re模組中的match函式提供了這種功能,若匹配成功則返回匹配物件,否則返回none。一 語法 d 表示匹配數字 w 表示匹配字母或數字 可以匹配任意字元 s可以匹配乙個空格或者tab 特殊...
Python之正規表示式
正規表示式元字元如下 匹配除換行符以外的所以字元 規定匹配模式必須出現在目標字串的開頭,例如 hell hello hellboy 規定匹配模式必須出現在目標字串的結尾,例如 ar car bar 其前乙個字元必須在目標物件中連續出現零次或多次 其前乙個字元必須在目標物件中連續出現一次或多次 其前乙...
Python之正規表示式
匯入re模組 檢索和替換 re.sub re.sub pattern,repl,string,count 0,flags 0 pattern 正則中的模式字串 repl 替換的字串,也可為乙個函式 string 要被查詢替換的原始字串 count 模式匹配後替換的最大次數,預設 0 表示替換所有的匹...