轉載需註明原文地址和作者兩項內容。 正則表達式目的是能夠快速處理字元串內容,主要用於找出指定的字元串,配合其他操作完成任務。使用正則表達式時要瞭解自己語言的特性,python中的正則表達式預設情況是貪婪模式,也就是不限制的情況下會儘可能多得匹配字元串。 0x00 基礎語法 0x01 python正則 ...
轉載需註明原文地址和作者兩項內容。
正則表達式目的是能夠快速處理字元串內容,主要用於找出指定的字元串,配合其他操作完成任務。
使用正則表達式時要瞭解自己語言的特性,python中的正則表達式預設情況是貪婪模式,也就是不限制的情況下會儘可能多得匹配字元串。
0x00 基礎語法
1 .:匹配除換行符以外的任意字元. 2 \s:匹配任意的空白符. 3 \d:匹配數字. 4 \D:匹配任何的非數字,等價於[^0-9]. 5 \b:匹配單詞的分界線. 6 \B:匹配一個單詞的非分界線. 7 ^:匹配字元串的開始. 8 $:匹配字元串的結束. 9 \w:匹配包括下劃線的任何單詞字元.類似但不等價於“[A-Za-z0-9_]”,Unicode字元集,能不能匹配漢字要視應用環境而定. 10 \W:匹配任何非單詞字元.等價“[^A-Za-z0-9_]”. 11 \:轉義,其後字元不作表達式解釋. 12 *:匹配*前面的字元0次或n次,等價於{0,}. 13 +:匹配+號前面的字元1次或n次.等價於{1,}. 14 ?:匹配?前面的字元0次或1次,等價於 {0,1}. 15 (x):匹配’x’並記錄匹配的值. 16 x│y:匹配表達式x或y. 17 {n}:匹配前面限定的字元n次. 18 {n,}:匹配前面限定的字元至少n次. 19 {n,m}:匹配前面限定的字元n-m次均可. 20 [xyz]:單字元列表,匹配括弧中的任一字元.可用連字元‘-’指出字元範圍. 21 [^xyz]:單字元列表的補集,匹配除了列出字元外的,同樣可指出字元範圍. 22 \f:匹配一個表單符. 23 \n:匹配一個換行符. 24 \r:匹配一個回車符. 25 \s:匹配一個單個white空格符,包括空格,tab,form feed,換行符,等價於[ fnrtv]. 26 \S:匹配除white空格符以外的一個單個的字元,等價於[^ fnrtv]. 27 t:匹配一個製表符. 28 v:匹配一個頂頭製表符. 29 \:將下一個字元標記為一個特殊字元、或一個原義字元、或一個後向引用、或一個八進位轉義符.
0x01 python正則模塊
import re
導入python正則表達式模塊
re.compile(str)
用於將字元串型的正則表達式編譯成一個正則表達式對象,可以直接使用對該對象使用re的方法。
返回pattern
re.findall(pattern,str)
將字元串按照正則表達式進行處理,第一個參數是匹配的正則規則,可接收pattern和字元串型的正則表達,第二個是待處理的字元串。
返回list
re.sub(pattern, replace, string, count)
將字元串中正則表達式匹配到的內容替換成指定的內容。
第二個函數是用於替換的字元串
第四個參數指替換個數。預設為0,表示每個匹配到的內容都替換。
返回str
re.sub還允許使用函數對匹配項的替換進行複雜的處理(參數2)。如:re.sub(r'\s', lambda m: '[' + m.group(0) + ']', text, 0);將字元串中的空格' '替換為'[ ]'。
re.split(pattern,str)
用於以正則匹配到的內容作為分隔符,分割字元串。
返回list
re.match(pattern, string, flags)
嘗試從字元串的開始匹配,字元串的起始處不符合正則表達式,則匹配失敗。
成功返回match,失敗返回None。
(內容可以用group()方法查看。)
第三個參數是標緻位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。
re.search(pattern, string, flags)
在整個字元串內匹配查找,找到第一個匹配然後返回,如果字元串沒有匹配,則返回None。
參數同re.match。
成功返回match,失敗返回None。
上述pattern也可以用str型的字元串替換,效果相同。
0x02 慄子
IPv4地址
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
URL(同時也是一個最小的非貪婪匹配慄子)
http://.*?/
匹配文件尾碼
.*\.php
匹配行首空格
^\s
匹配同一單詞不區分大小寫
[Tt]ools
如有錯誤煩請留言指正,之後遇到更多情況會陸續補充。