Python學習筆記|Python之正規表示式
什麼是正規表示式
正規表示式是包含文字和特殊字元的字串,該字串描述一個可以識別各種字串的模式
1.字元
1.1 正規表示式對字元(單個字元)的表示
.
匹配任意1個字元(除了\n),注意因為.表示任意一個字元,所以如果匹配‘.’則需要用轉義字元.來表示
程式碼如下:
print(re.findall('.',"s2a4561b3678 ——"))
結果如下:
['s', '2', 'a', '4', '5', '6', '1', 'b', '3', '6', '7', '8', ' ', '—', '—']
[ ]
匹配
[ ]
中列舉的字元,如果[a-zA-Z0-9],[a-zA-Z]表示所有字母和數字,後者表示所有字母,注意中間沒有空格符號。
\d
匹配數字,即0-9
程式碼如下:
print(re.findall('\d',"s2a4561b3678 ——"))
結果為:
['2', '4', '5', '6', '1', '3', '6', '7', '8']
\D
匹配非數字,即不是數字
程式碼如下:
print(re.findall('\D',"s2a4561b3678 ——"))
結果如下:
['s', 'a', 'b', ' ', '—', '—']
\s
匹配空白,即 空格,tab鍵
程式碼如下:
print(re.findall('\s',"s2a4561b3678 ——"))
結果如下:
[' ']
\S
匹配非空白
程式碼如下:
print(re.findall('\S',"s2a4561b3678 ——"))
結果如下:
['s', '2', 'a', '4', '5', '6', '1', 'b', '3', '6', '7', '8', '—', '—']
\w
匹配單詞字元,即a-z、A-Z、0-9、_
程式碼如下:
print(re.findall('\w',"s2a4561b3678 ——"))
結果如下:
['s', '2', 'a', '4', '5', '6', '1', 'b', '3', '6', '7', '8']
\W
匹配非單詞字元
程式碼如下:
print(re.findall('\W',"s2a4561b3678 ——"))
結果如下:
[' ', '—', '—']
1.2 正規表示式匹配多個字元:數量的表示
text = "a aAx aAAy bAAz cAAAk"
*
匹配前一個字元出現0次或者無限次,即可有可無
print(re.findall(r"aA*", text)) #['a', 'aA', 'aAA']
+
匹配前一個字元出現1次或者無限次,即至少有1次
print(re.findall(r"aA+", text)) #['aA', 'aAA']
?
匹配前一個字元出現1次或者0次,即要麼有1次,要麼沒有
print(re.findall(r"aA?", text)) #['a', 'aA', 'aA']
{m}
匹配前一個字元出現m次
print(re.findall(r"A{2}",text)) #['AA', 'AA', 'AA']
{m,}
匹配前一個字元至少出現m次
print(re.findall(r"A{1,}",text)) #['A', 'AA', 'AA', 'AAA']
{m,n}
匹配前一個字元出現從m到n次
print(re.findall(r"A{1,2}",text))#['A', 'AA', 'AA', 'AA', 'A']
1.3 正規表示式:匹配邊界的問題
^
匹配字串開頭
print(re.findall('^s',"s2a4561b3678 ——"))
結果為:
['s']
$
匹配字串結尾
print(re.findall('8$',"s2a4561b3678"))
結果為:
['8']
\b
匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
print(re.findall(r'\bs',"s2abc4561b3678 ——"))
['s']
\B
匹配非單詞邊界,‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
print(re.findall(r'\babc\b',"abc4561b3678 ——abc"))
結果為:
['abc']
2.re模組中常用的功能函式
首先了解下flags值的含義,具體如下:
- re.S(DOTALL)
使.匹配包括換行在內的所有字元
- re.I(IGNORECASE)
使匹配對大小寫不敏感
- re.L(LOCALE)
做本地化識別(locale-aware)匹配,法語等
- re.M(MULTILINE)
多行匹配,影響^和$
- re.X(VERBOSE)
該標誌通過給予更靈活的格式以便將正規表示式寫得更易於理解
- re.U
根據Unicode字符集解析字元,這個標誌影響\w,\W,\b,\B
2.1 compile()
- 函式原型
生成一個正規表示式物件,供 match() 和 search() 這兩個函式使用
re.compile(pattern,flags=0)
2.2 serach()
- 函式原型
整個字串中匹配
re.search(pattern, string, flags=0)
如下:
print(re.search('com', 'www.baidu.com'))
2.3 match()
- 函式原型
re.match(pattern, string, flags=0)
match匹配,如果匹配成功,則返回一個match object的match物件
print(re.match('www', 'www.baidu.com')) # 在起始位置匹配
如果不是起始位置匹配成功的話,match()就返回None
print(re.match('com', 'www.baidu.com')) # 不在起始位置匹配
- 總結
match與search區別
1.re.match只匹配字串的開始,如果字串開始不符合正規表示式,則匹配失敗,函式返回None
2.re.search匹配整個字串,直到找到一個匹配。
2.4 findall()
- 函式原型
findall字串中找到正規表示式所匹配的所有子串,並返回一個列表
re.findall(pattern, string, flags=0)
2.5 finditer()
- 函式原型
finditer字串中找到正規表示式所匹配的所有子串,並把它們作為一個迭代器返回
re.finditer(pattern, string, flags=0)
2.6 split()
- 函式原型
split將字串按照正規表示式分隔,返回一個列表
re.split(pattern, string[, maxsplit])
2.7 sub()
- 函式原型
sub用於替換字串中的匹配項,將字串根據正規表示式用引數二替換,返回一個替換後的字串
re.sub(pattern, repl, string, count)
2.8 subn()
- 函式原型
subn返回替換個數,並以元組形式返回(字串,替換個數)
subn(pattern, repl, string, count=0, flags=0)
3.match object中的方法
match和search一旦匹配成功,就是一個match object物件,而match object物件有以下方法:
3.1 groups()
返回被 RE 匹配的字串
3.2 start()
返回匹配開始的位置
3.3 end()
返回匹配結束的位置
3.4 span()
返回一個元組包含匹配 (開始,結束) 的位置
3.5 group()
返回re整體匹配的字串,可以一次輸入多個組號,對應組號匹配的字串。
4.貪婪匹配與非貪婪匹配
- 非貪婪模式
在整個表示式匹配成功的前提下,儘可能少的匹配,量詞後面直接加上一個問號”?”就變成了飛非貪婪,具體量詞有5個,分別為:*,+,?,{m},{n,m}
a = re.findall(r"a(\d+?)",'a23ba23')
print(a)
- 貪婪匹配
正規表示式一般趨向於最大長度匹配,也就是所謂的貪婪匹配,python中預設採用的是貪婪模式
b = re.findall(r"a(\d+)",'a23ba23')
print(b)
相關文章
- Python學習筆記 - 正規表示式Python筆記
- python 中的正規表示式學習筆記Python筆記
- Python筆記五之正規表示式Python筆記
- python爬蟲學習筆記4-正規表示式Python爬蟲筆記
- 正規表示式學習筆記筆記
- js加固之正規表示式學習筆記JS筆記
- python之正規表示式Python
- Day1-學習筆記-js之正規表示式筆記JS
- JavaScript正規表示式學習筆記(一)JavaScript筆記
- Python學習筆記 - lambda表示式Python筆記
- Python 之 RE(正規表示式)常用Python
- Python基礎之正規表示式Python
- Python——正規表示式Python
- python正規表示式Python
- Python 正規表示式Python
- Python:正規表示式Python
- 正規表示式學習筆記(1)-認識正則筆記
- 工作學習筆記(二) 正規表示式(轉載)筆記
- python 正規表示式匹配Python
- Python正規表示式手稿Python
- Python正規表示式大全Python
- Python學習筆記|Python之推導式Python筆記
- JavaScript正規表示式學習筆記(二) - 打怪升級JavaScript筆記
- Python3之正規表示式詳解Python
- Python--之正規表示式一基礎Python
- Python正規表示式簡記和re庫Python
- 正規表示式速查筆記筆記
- 小豬的Python學習之旅 —— 3.正規表示式Python
- Python正規表示式詳解Python
- Python 正規表示式(RegEx)指南Python
- 詳解 Python 正規表示式Python
- 正規表示式(python3)Python
- 從零開始的Python學習Episode 15——正規表示式Python
- JS筆記(15): 正規表示式JS筆記
- Go 正規表示式學習Go
- Python 正規表示式 re 模組Python
- python re模組 正規表示式Python
- Python-day-15-正規表示式Python