007零基礎(chǔ)學(xué)Python:Python 正則表達式--學(xué)習(xí)筆記

Python 正則表達式

  1. 正則表達式基礎(chǔ)
  2. 基本概念:

正則表達式是用于處理字符串的強大工具,擁有自己獨特的語法以及一個獨立的處理引擎,效率上可能不如str自帶的方法,但功能十分強大。

  1. 執(zhí)行原理:

依次拿出表達式和文本中的字符比較,如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。


Python原理圖.png
  1. 基本語法:

開始之前;正則表達式并非某一門語言所特有的的編程方式,而是一個獨立的語法方式,在其他語言通用的解析方式,如下為基本格式:

|模式| 描述|
|:-|:-|:-|
|^| 匹配字符串的開頭|
|$| 匹配字符串的末尾。|
|.| 匹配任意字符,除了換行符,當(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)匹配。否則指的是八進制字符碼的


python的語法貼圖

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)站。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容