Python之正規表示式

2021-08-10 18:55:21 字數 2804 閱讀 3254

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 表示替換所有的匹...