Python 正則表達式
- 正則表達式基礎(chǔ)
- 基本概念:
正則表達式是用于處理字符串的強大工具,擁有自己獨特的語法以及一個獨立的處理引擎,效率上可能不如str自帶的方法,但功能十分強大。
- 執(zhí)行原理:
依次拿出表達式和文本中的字符比較,如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。
Python原理圖.png
- 基本語法:
開始之前;正則表達式并非某一門語言所特有的的編程方式,而是一個獨立的語法方式,在其他語言通用的解析方式,如下為基本格式:
|模式| 描述|
|:-|:-|:-|
|^| 匹配字符串的開頭|
|$| 匹配字符串的末尾。|
|.| 匹配任意字符,除了換行符,當(dāng)re.DOTALL標記被指定時,則可以匹配包括換行符的任意字符。|
|[...]| 用來表示一組字符,單獨列出:[amk] 匹配 'a','m'或'k'|
|[^...]| 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。|
|re*| 匹配0個或多個的表達式。|
|re+| 匹配1個或多個的表達式。|
|re?| 匹配0個或1個由前面的正則表達式定義的片段,非貪婪方式|
|re{ n} re{ n,}| 精確匹配n個前面表達式。|
|re{ n, m}| 匹配 n 到 m 次由前面的正則表達式定義的片段,貪婪方式|
|alb| 匹配a或b|
|(re)| G匹配括號內(nèi)的表達式,也表示一個組
|(?imx)| 正則表達式包含三種可選標志:i, m, 或 x 。只影響括號中的區(qū)域。
|(?-imx)| 正則表達式關(guān)閉 i, m, 或 x 可選標志。只影響括號中的區(qū)域。
|(?: re)| 類似 (...), 但是不表示一個組
|(?imx: re)| 在括號中使用i, m, 或 x 可選標志
|(?-imx: re)| 在括號中不使用i, m, 或 x 可選標志
|(?#...)| 注釋.
|(?= re)| 前向肯定界定符。如果所含正則表達式,以 ... 表示,在當(dāng)前位置成功匹配時成功,否則失敗。但一旦所含表達式已經(jīng)嘗試,匹配引擎根本沒有提高;模式的剩余部分還要嘗試界定符的右邊。
|(?! re)| 前向否定界定符。與肯定界定符相反;當(dāng)所含表達式不能在字符串當(dāng)前位置匹配時成功
|(?> re)| 匹配的獨立模式,省去回溯。
|\w| 匹配字母數(shù)字及下劃線
|\W| 匹配非字母數(shù)字及下劃線
|\s| 匹配任意空白字符,等價于 [\t\n\r\f].
|\S| 匹配任意非空字符
|\d| 匹配任意數(shù)字,等價于 [0-9].
|\D| 匹配任意非數(shù)字
|\A| 匹配字符串開始
|\Z| 匹配字符串結(jié)束,如果是存在換行,只匹配到換行前的結(jié)束字符串。c
|\z| 匹配字符串結(jié)束
|\G| 匹配最后匹配完成的位置。
|\b| 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
|\B| 匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
|\n, \t, 等.| 匹配一個換行符。匹配一個制表符。等
|\1...\9| 匹配第n個分組的內(nèi)容。
|\10| 匹配第n個分組的內(nèi)容,如果它經(jīng)匹配。否則指的是八進制字符碼的

2.Python中的正則表達式使用
- 方法:re.match(pattern, string, flags=0)
從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。
參數(shù):
pattern
匹配的正則表達式
string
要匹配的字符串。
flags
標志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等
-
方法:re.search(pattern, string, flags=0)
掃描整個字符串并返回第一個成功的匹配。pattern 匹配的正則表達式
string 要匹配的字符串。
flags 標志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等。 方法:**findall(string[, pos[, endpos]]) | re.findall(pattern, string[, flags]): **
搜索string,以列表形式返回全部能匹配的子串方法:**sub(repl, string[, count]) | re.sub(pattern, repl, string[, count]): **
使用repl替換string中每一個匹配的子串后返回替換后的字符串。
擴展測試代碼:
#導(dǎo)入re模塊
import re
if __name__ == '__main__':
#1-match()方法
m = re.match(r'pytho.', 'python_coding')
print(m) #<_sre.SRE_Match object; span=(0, 6), match='python'>
print(m.group()) #pyton
m = re.match(r'pytho.', 'apython_coding')
print(m) #none
#2-search()方法
s = re.search(r'pytho.', 'apython_coding')
print(s.group())
#3-groups()方法
s = re.findall(r'\d+', '我12在340學(xué)56python90000')
print(s)
擴展:測試代碼比較簡單,其實正則語法簡介,使用非常靈活,這里使用可以借鑒,目前專門應(yīng)對正則的網(wǎng)站。
-
在線正則表達式測試
常用的正則已經(jīng)準備好了,例如:qq號:[1-9][0-9]{4,} - 10 個在線正則表達式測試網(wǎng)站
