cuiqingcai大佬《python3 網路爬蟲開發實戰》整理
貪婪與非貪婪
importrecontent = '
hello 12345678 word_this is a regex demo
'result = re.match('
^he.*(\d+).*demo$
', content)
print(result.group(1))
原本打算取出12345678,但
執行結果:8
貪婪匹配模式:.* 會匹配盡可能多的字元。
.*後(\d+)至少匹配乙個數字,未指定具體數字。因此,.*盡可能匹配多的字元,把1234567匹配,給\d+留下乙個僅滿足條件的結果8。
so,最後結果就至於8了。
非貪婪模式匹配:.*? 盡可能匹配少的字元,餘下交給後面的去匹配。
在.*後加乙個?
importrecontent = '
hello 12345678 world_this is a regex demo
'result = re.match('
^he.*?(\d+).*demo$
', content)
print(result.group(1))
執行結果:12345678
所以,匹配時,字元中間盡量用非貪婪匹配,以免出現匹配結果確實的情況。若是匹配結果在字串結果,.*?有可能匹配不到任何內容,因為它會匹配盡可能少的字元。
importrecontent = '
'result1 = re.match('
^h.*?comment/(.*?)
', content)
result2 = re.match('
^h.*?comment/(.*)
', content)
print('
result1
', result1.group(1))
print('
result2
', result2.group(2))
修飾符
修飾符描述
re.i
使匹配對大小寫不敏感
re.l
做本地化識別(local-aware)匹配
re.m
多行匹配,影響^和$
re.s
使.匹配包括換行符在內的所有字元
re.u
根據unicode字符集解析字元。這個標誌影響\w、\w、\b和\b
re.x
該標誌通過給予你更靈活的格式以便你將正規表示式寫得更易於理解
轉義匹配 \
match() 從字串的開頭開始匹配,若開頭不匹配,整個匹配失敗。更適合用來檢測某個字串是否符合某個正規表示式的規則。
search() 搜尋整個字串,然後返回第乙個成功匹配的結果。
findall() 搜尋整個字串,然後返回匹配正規表示式的所有內容。
sub() 修改文字
sub('引數1', '引數2', content)
引數1傳入修改匹配的表示式,引數2替換內容.
經過sub()處理後在用xx方法匹配,效果可能會更好。
compile() 將正規表示式編譯成物件,後面匹配可復用。
compile()中可傳入修飾符,這樣在search()、findall()方法中就不需額外再傳了。
Python爬蟲 正規表示式補充
一.正規表示式 正規表示式 regular expression,簡稱regex或re 又稱為正規表示法或常規表示法,常常用來檢索 替換那些符合某個模式的文字,它首先設定好了一些特殊的字及字元組合,通過組合的 規則字串 來對表示式進行過濾,從而獲取或匹配我們想要的特定內容。它具有靈活 邏輯性和功能性...
正規表示式補充學習
search a 查詢 返回的是位置,如果沒有則返回 1 substring 擷取字元 substring 2,5 2位開始,5結束,不包第5 charat 獲取某個字元 charat 0 split 分割字元 正規表示式 js寫法 new regexp a i perl寫法 var a i i 忽...
正規表示式使用補充
doctype html html lang zh cn head meta charset utf 8 title title title head body h2 正規表示式 h2 p 工作時 如果有對於字串的 檢索 想到正規表示式 看語法 手機號驗證 郵箱驗證 p body html scri...