標籤:組成 print 長度 條件 貪婪 用法 意義 Python全棧 取消
29 Regex re模組
一.Regex
官方定義:Regex是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則字串”,
這個“規則字串”用來表達對字串的一種過濾邏輯。Regex
作用:
1.規範字串規則(通過一個規則從一段字串中找到符合規則的內容)
2.判斷某段字串是否符合規則.
(一).字元組 [ - ]從小往大指 按照ascii的順序
在同一個位置可能出現的各種字元組成了一個字元組,在Regex中用[]表示
字元分為很多類,比如數字、字母、標點等等
(二).字元
元字元 匹配內容
. 匹配除分行符號以外的任一字元
\w 匹配字母或數字或底線
\s 匹配任意的空白符
\d 匹配數字
\n 匹配一個分行符號
\t 匹配一個定位字元
\b 匹配一個單詞的結尾
^ 匹配字串的開始
$ 匹配字串的結尾
\W 匹配非字母或數字或底線
\D 匹配非數字
\S 匹配非空白符
a|b 匹配字元a或字元b
() 匹配括弧內的運算式,也表示一個組
[...] 匹配字元組中的字元
[^...] 匹配除了字元組中字元的所有字元
(三).量詞
量詞 用法說明
* 重複零次或更多次
+ 重複一次或更多次
? 重複零次或一次
{n} 重複n次
{n,} 重複n次或更多次
{n,m} 重複n到m次
(四).字元集 字元集[][^]
李[傑蓮英二棍子]* 表示匹配"李"字後面[傑蓮英二棍子]的字元任意次
李[^和]* 表示匹配一個不是"和"的字元任意次
[\d] 456bdha3 表示匹配任意一個數字,匹配到4個結果
[\d]+ 456bdha3 表示匹配任意個數字,匹配到2個結果
(五).分組 或| [^]
社會安全號碼碼是一個長度為15或18個字元的字串,如果是15位則全部???數字組成,首位不能為0;
如果是18位,則前17位全部是數字,末位可能是數字或x,下面我們嘗試用正則來表示
^[1-9]\d{16}[0-9x]|^[1-9]\d{14}
(六)轉意符\
1.在Regex中,有很多有特殊意義的是元字元,比如\d和\s等,
如果要在正則中匹配正常的"\d"而不是"數字"就需要對"\"進行轉義,變成‘\\‘
2.所以如果匹配一次"\d",字串中要寫成‘\\d‘,那麼正則裡就要寫成"\\\\d",這樣就太麻煩了。
這個時候我們就用到了r‘\d‘這個概念,此時的正則是r‘\\d‘就可以了 ("r"表示取消所有轉義)
(七)貪婪匹配 貪婪匹配:在滿足匹配時,匹配儘可能長的字串,預設情況下,採用貪婪匹配
<.*> 預設為貪婪匹配模式,會匹配盡量長的字串
<.*?> 加上?為將貪婪匹配模式轉為非貪婪匹配模式,會匹配盡量短的字串
(八)惰性匹配 ( 元字元+量詞+"?") 最少匹配次數
如果後面有條件,條件內匹配最少的, 表示匹配任意長度的字元遇到標識就立刻停止 (爬蟲需要)
(九)小數
\d+\.?\d+ 有紕漏 (12.)
\d+(\.\d+)? 牢記
二.re模組
模組:操作某一個確實存在的內容的python方式
re模組:如何用python操作正則
1.re.findall("正則","待匹配字串")
2.re.search("正則","帶匹配字串") 返回一個對象,賦值給變數ret ; 通過ret.group()擷取匹配的字串
如果字串沒有匹配,則返回None.
import re
ret=re.findall(‘\d+‘,"fhjgh56556jjj87878")
print(ret) # 返回所有滿足匹配條件的結果,放在列表裡
print(ret)
ret=re.search("\d+","gdhgjh767676hjhljljj898989")
print(ret.group())
python全棧開發 * 29知識點匯總 * 180712