python正則表達式的簡單使用總結
- 2020 年 11 月 6 日
- AI
- Python
在編程中,經常會涉及到字符串的操作,一個常用的策略就是利用split
函數,然後對於特定的字符串進行匹配,但是這種方法格式複雜,可復用性較差。
正則表達式是處理字符串匹配一個必不可少的方法,定義一個語義規則,來進行特定的字符字符串的規則。
正則表達式速查表
1 元字符,用特殊符號表示一類元素
語法 |
說明 |
語法示例 |
匹配字符 |
. |
匹配除換行符以外的任意字符(這是一個小紅點兒) |
a.c |
abc |
\w |
匹配字母或數字或下劃線 (可以記成 word ) |
a\wc |
a2c |
\b |
匹配一個單詞的邊界 |
foo\b |
匹配foo,foo. 但不匹配foobar |
\B |
匹配空字符串,但 不 能在詞的開頭或者結尾 |
py\B |
匹配python py2 py3, 但不匹配py. |
^ |
匹配字符串的開始 |
^abc |
abc |
\W |
匹配非字母數字下劃線 |
a\Wb |
a b |
\d |
匹配數字 (可記成 digit ) |
a\dc |
a2c |
\D |
匹配非數字 |
a\Dc |
abc |
\s |
匹配任意的空白符 (可以記成 space ) |
a\sb |
a b |
\S |
匹配非空白符 |
a\Sb |
acb |
a|b |
匹配字符a或字符b。(長的寫前面,短的寫後面) |
abc|def |
abc 或def |
() |
匹配括號內的表達式,也表示一個組 |
(abc) |
abc |
[…] |
匹配字符組中的字符 |
a[bcd]e |
abe 或ace或ade |
[^…] |
匹配除了字符組中字符的所有字符 |
a[bcd]e |
ase |
2 字符組 [],限制範圍,某個位置只能出現這個範圍內的某個元素。
語法 |
說明 |
語法示例 |
匹配字符 |
[0123456789] |
只能匹配0-9數字,可寫成[0-9] |
[0123456789] |
0或1或2… |
[a-z] |
只能匹配小寫字母 |
[a-z] |
d |
[A-Z] |
只能匹配大寫字母 |
[A-Z] |
D |
[0-9a-fA-F] |
可以匹配16進制的某個數 |
[0-9a-fA-F] |
D |
3 量詞,表示數量,約束前面元字符出現的次數。
語法 |
說明 |
語法示例 |
匹配字符 |
* |
重複前一個字符零次或多次 |
abc* |
ab 或abccc |
+ |
重複前一個字符一次或多次 |
abc+ |
abc 或abccc |
? |
重複前一個字符零次或一次 |
abc? |
ab 或abc |
{n} |
重複前一個字符n次 |
abc{3} |
abccc |
{n,} |
重複前一個字符至少n次 |
abc{3,} |
abccccc |
{n,m} |
重複前一個字符n到m次 |
abc{1,5} |
abc或abcc或abccccc |
re模塊包函數
# 導入包
import re
################re.compile() 編譯
# 將正則表達式編譯成一個正則表表達式對象。
# 如果一個正則表達式在程序中只用一次,就沒必要編譯了。
# 如果同一個正則表達式要被多次使用時,就需要對表達式進行編譯,以便後續使用。
例如:匹配www.baidu.com
pattern = r'w*\.[a-z]{5}\.[a-z]*'
prog = re.compile(pattern)
string = 'www.baidu.com'
result = prog.match(string)
# 如果匹配成功返回match對象,不成功返回None
###################re.findall() 返回列表
# 一、re.findall(正則表達式,待匹配的字符串,flags=0)
# 二、findall默認只顯示分組中的,分組有優先級。
pattern = r'w{3}\.(baidu|oldboy)\.com'
prog = re.compile(pattern)
ret = re.findall(prog, 'www.baidu.com')
print(ret)
# 結果:['baidu']
# 三、加上 ?: 取消分組的優先
# ret = re.findall('www\.(?:baidu|oldboy)\.com', 'www.baidu.com')
# print(ret)
# 結果:['www.baidu.com']
###################re.match()
#從頭匹配
re.match(pattern, string, flags=0)
#如果 string 開始的0或者多個字符匹配到了正則表達式樣式,就返回一個相應的 匹配對象 。 如果沒有匹配,就返回 None ;
#需要group(),才能返回值
###################re.search()
#掃描整個 字符串 找到匹配樣式的第一個位置,並返回一個相應的 匹配對象。如果沒有匹配,就返回一個 None ; 注
#同樣需要group(),才能的返回值
####################re.sub()、re.subn()
# re.sub()
re.sub(r'\sAND\s', ' & ', 'Baked Beans And Spam', flags=re.IGNORECASE) # 【表達式表示替換內容,要替換的新元素,替換對象,替換次數】
# 結果為:'Baked Beans & Spam'
# re.subn()
re.subn(r'\sAND\s', ' & ', 'Baked Beans And Spam', flags=re.IGNORECASE) # 【返回元組,前面是替換完的結果,後面是替換的次數】
結果是('Baked Beans & Spam', 1)