python  -------re模塊
正則表達(dá)式正則表達(dá)式本身是一種小型的、高度專業(yè)化的編程語言而在python中通過內(nèi)嵌集成re模塊程序員們可以直接調(diào)用來實現(xiàn)正則匹配。正則表達(dá)式模式被編譯成一系列的字節(jié)碼然后由用C編寫的匹配引擎執(zhí)行。正則表達(dá)式是用來匹配處理字符串的 python 中使用正則表達(dá)式需要引入re模塊如import re #第一步要引入re模塊a re.findall(“匹配規(guī)則”, “要匹配的字符串”) #第二步調(diào)用模塊函數(shù)以列表形式返回匹配到的字符串如#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模塊 a re.findall(匹配規(guī)則, 這個字符串是否有匹配規(guī)則的字符) #第二步調(diào)用模塊函數(shù) print(a) #以列表形式返回匹配到的字符串 #打印出 [匹配規(guī)則]^ 元字符:字符串開始位置與匹配規(guī)則符合就匹配否則不匹配匹配字符串開頭。在多行模式中匹配每一行的開頭(ps: ^ 元字符如果寫到[]字符集里就是反取)#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模塊 a re.findall(^匹配規(guī)則, 匹配規(guī)則這個字符串是否匹配) #字符串開始位置與匹配規(guī)則符合就匹配否則不匹配 print(a) #以列表形式返回匹配到的字符串 #打印出 [匹配規(guī)則]反取舉例#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模塊 a re.findall([^a-z], 匹配s規(guī)則這s個字符串是否s匹配f規(guī)則則re則則則) #反取匹配出除字母外的字符 print(a) #以列表形式返回匹配到的字符串 #打印出 [匹, 配, 規(guī), 則, 這, 個, 字, 符, 串, 是, 否, 匹, 配, 規(guī), 則, 則, 則, 則, 則]$ 元字符:字符串結(jié)束位置與匹配規(guī)則符合就匹配否則不匹配匹配字符串末尾在多行模式中匹配每一行的末尾#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模塊 a re.findall(匹配規(guī)則$, 這個字符串是否匹配規(guī)則) #字符串結(jié)束位置與匹配規(guī)則符合就匹配否則不匹配 print(a) #以列表形式返回匹配到的字符串 #打印出 [匹配規(guī)則]元字符:需要字符串里完全符合匹配規(guī)則就匹配規(guī)則里的元字符前面的一個字符可以是0個或多個原本字符匹配前一個字符0或多次貪婪匹配前導(dǎo)字符有多少個就匹配多少個很貪婪如果規(guī)則里只有一個分組盡量避免用*否則會有可能匹配出空字符串#!/usr/bin/env python-- coding:utf-8 --import re #第一步要引入re模塊 a re.findall(匹配規(guī)則*, 這個字符串是否匹配規(guī)則則則則則) #需要字符串里完全符合匹配規(guī)則就匹配規(guī)則里的*元字符前面的一個字符可以是0或多個原本字符 print(a) #以列表形式返回匹配到的字符串 #打印出 [匹配規(guī)則則則則則]元字符:需要字符串里完全符合匹配規(guī)則就匹配規(guī)則里的元字符前面的一個字符可以是1個或多個原本字符匹配前一個字符1次或無限次貪婪匹配前導(dǎo)字符有多少個就匹配多少個很貪婪#!/usr/bin/env python# -*- coding:gbk -*- import re #第一步要引入re模塊 a re.findall(匹配, 匹配配配配配規(guī)則這個字符串是否匹配規(guī)則則則則則) #需要字符串里完全符合匹配規(guī)則就匹配規(guī)則里的元字符前面的一個字符可以是1個或多個原本字符 print(a) #以列表形式返回匹配到的字符串 #打印出 [匹配配配配配, 匹配]? 元字符和防止貪婪匹配:需要字符串里完全符合匹配規(guī)則就匹配規(guī)則里的?元字符前面的一個字符可以是0個或1個原本字符匹配一個字符0次或1次還有一個功能是可以防止貪婪匹配詳情見防貪婪匹配#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模塊 a re.findall(匹配規(guī)則?, 匹配規(guī)這個字符串是否匹配規(guī)則則則則則) #需要字符串里完全符合匹配規(guī)則就匹配規(guī)則里的?元字符前面的一個字符可以是0個或1個原本字符 print(a) #以列表形式返回匹配到的字符串 #打印出 [匹配規(guī), 匹配規(guī)則]{} 元字符,范圍:需要字符串里完全符合匹配規(guī)則就匹配規(guī)則里的 {} 元字符前面的一個字符是自定義字符數(shù)位數(shù)的原本字符{m}匹配前一個字符m次{m,n}匹配前一個字符m至n次若省略n則匹配m至無限次{0,}匹配前一個字符0或多次,等同于*元字符{,}匹配前一個字符1次或無限次,等同于元字符{0,1}匹配前一個字符0次或1次,等同于?元字符#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模塊 a re.findall(匹配規(guī)則{3}, 匹配規(guī)這個字符串是否匹配規(guī)則則則則則) #{m}匹配前一個字符m次{m,n}匹配前一個字符m至n次若省略n則匹配m至無限次 print(a) #以列表形式返回匹配到的字符串 #打印出 [匹配規(guī)則則則][] 元字符,字符集:需要字符串里完全符合匹配規(guī)則就匹配規(guī)則里的 [] 元字符對應(yīng)位置是[]里的任意一個字符就匹配字符集。對應(yīng)的位置可以是字符集中任意字符。字符集中的字符可以逐個列出也可以給出范圍如[abc]或[a-c]。[^abc]表示取反即非abc。所有特殊字符在字符集中都失去其原有的特殊含義。用\反斜杠轉(zhuǎn)義恢復(fù)特殊字符的特殊含義。#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模塊 a re.findall(匹配[a,b,c]規(guī)則, 匹配a規(guī)則這個字符串是否匹配b規(guī)則則則則則) #需要字符串里完全符合匹配規(guī)則就匹配規(guī)則里的 [] 元字符對應(yīng)位置是[]里的任意一個字符就匹配 print(a) #以列表形式返回匹配到的字符串 [^]非反取匹配出除[^]里面的字符^元字符如果寫到字符集里就是反取 a re.findall([^a-z], 匹配s規(guī)則這s個字符串是否s匹配f規(guī)則則re則則則) #反取匹配出除字母外的字符 print(a) #以列表形式返回匹配到的字符串 #打印出 [匹, 配, 規(guī), 則, 這, 個, 字, 符, 串, 是, 否, 匹, 配, 規(guī), 則, 則, 則, 則, 則]反斜杠后邊跟普通字符實現(xiàn)特殊功能即預(yù)定義字符預(yù)定義字符是在字符集和組里都是有用的\d匹配任何十進(jìn)制數(shù)它相當(dāng)于類[0-9]#!/usr/bin/env python# -*- coding:utf-8 -*- import re #第一步要引入re模塊 a re.findall(\d, 匹配規(guī)則這2個字符串3是否匹配規(guī)則5則則則7則) #\d匹配任何十進(jìn)制數(shù)它相當(dāng)于類[0-9] print(a) #以列表形式返回匹配到的字符串 #打印出 [2, 3, 5, 7]\d如果需要匹配一位或者多位數(shù)的數(shù)字時用#!/usr/bin/env python # -*- coding:gbk -*- import re #第一步要引入re模塊 a re.findall(\d, 匹配規(guī)則這2個字符串134444是否匹配規(guī)則5則則則7則) #\d如果需要匹配一位或者多位數(shù)的數(shù)字時用 print(a) #以列表形式返回匹配到的字符串 #打印出 [2, 134444, 5, 7]\D 匹配任何非數(shù)字字符它相當(dāng)于類[^0-9]#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模塊 a re.findall(\D, 匹配規(guī)則這2個字符串3是否匹配規(guī)則5則則則7則) #\D匹配任何非數(shù)字字符它相當(dāng)于類[^0-9] print(a) #以列表形式返回匹配到的字符串 #打印出 [匹, 配, 規(guī), 則, 這, 個, 字, 符, 串, 是, 否, 匹, 配, 規(guī), 則, 則, 則, 則, 則]\s 匹配任何空白字符它相當(dāng)于類[\t\n\r\f\v]#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模塊 a re.findall(\s, 匹配規(guī)則 這2個字符串3是否匹\n配規(guī)則5則則則7則) #\s匹配任何空白字符它相當(dāng)于類[\t\n\r\f\v] print(a) #以列表形式返回匹配到的字符串 #打印出[ , , , \n]\S 匹配任何非空白字符它相當(dāng)于類[^\t\n\r\f\v]#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模塊 a re.findall(\S, 匹配規(guī)則 這2個字符串3是否匹\n配規(guī)則5則則則7則) #\S匹配任何非空白字符它相當(dāng)于類[^\t\n\r\f\v] print(a) #以列表形式返回匹配到的字符串 #打印出 [匹, 配, 規(guī), 則, 這, 2, 個, 字, 符, 串, 3, 是, 否, 匹, 配, 規(guī), 則, 5, 則, 則, 則, 7, 則]\w 匹配包括下劃線在內(nèi)任何字母數(shù)字字符它相當(dāng)于類[a-zA-Z0-9_]#!/usr/bin/env python # -*- coding:utf8 -*- import re #第一步要引入re模塊 a re.findall(\w,https://www.cnblogs.com/) #\w匹配包括下劃線在內(nèi)任何字母數(shù)字字符它相當(dāng)于類[a-zA-Z0-9_] print(a) #以列表形式返回匹配到的字符串 #打印出 [h, t, t, p, s, w, w, w, c, n, b, l, o, g, s, c, o, m]\W匹配非任何字母數(shù)字字符包括下劃線在內(nèi)它相當(dāng)于類[^a-zA-Z0-9_]import re #第一步要引入re模塊 a re.findall(\W,https://www.cnblogs.com/) #\w匹配包括下劃線在內(nèi)任何字母數(shù)字字符它相當(dāng)于類[a-zA-Z0-9_] print(a) #以列表形式返回匹配到的字符串 #打印出[:, /, /, ., ., /]()元字符分組也就是分組匹配()里面的為一個組也可以理解成一個整體如果()后面跟的是特殊元字符如 (adc)* 那么*控制的前導(dǎo)字符就是()里的整體內(nèi)容不再是前導(dǎo)一個字符#!/usr/bin/env python # -*- coding:utf8 -*- import re #第一步要引入re模塊 #也就是分組匹配()里面的為一個組也可以理解成一個整體 a re.search((a4), a4a4a4a4a4dg4g654gb) #匹配一個或多個a4 b a.group() print(b) #打印出 a4a4a4a4a4 #!/usr/bin/env python # -*- coding:utf8 -*- import re #第一步要引入re模塊 #也就是分組匹配()里面的為一個組也可以理解成一個整體 a re.search(a(\d), a466666664a4a4a4dg4g654gb) #匹配 (a) (\d0-9的數(shù)字) (可以是1個到多個0-9的數(shù)字) b a.group() print(b) #打印出 a466666664|元字符或|或或就是前后其中一個符合就匹配#!/usr/bin/env python # -*- coding:utf8 -*- import re #第一步要引入re模塊 a re.findall(r你|好, a4a4a你4aabc4a4dgg好dg4g654g) #|或或就是前后其中一個符合就匹配 print(a) #打印出 [你, 好]r原生字符將在python里有特殊意義的字符如\b轉(zhuǎn)換成原生字符就是去除它在python的特殊意義不然會給正則表達(dá)式有沖突為了避免這種沖突可以在規(guī)則前加原始字符rre模塊中常用功能函數(shù)正則表達(dá)式有兩種書寫方式一種是直接在函數(shù)里書寫規(guī)則#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模塊 a re.findall(匹配規(guī)則, 這個字符串是否有匹配規(guī)則的字符) #第二步調(diào)用模塊函數(shù) print(a) #以列表形式返回匹配到的字符串 #打印出 [匹配規(guī)則]match()函數(shù)以后常用match從頭匹配一個符合規(guī)則的字符串從起始位置開始匹配匹配成功返回一個對象未匹配成功返回Nonematch(pattern, string, flags0)#pattern 正則模型#string 要匹配的字符串#falgs 匹配模式注意match()函數(shù) 與 search()函數(shù)基本是一樣的功能不一樣的就是match()匹配字符串開始位置的一個符合規(guī)則的字符串search()是在字符串全局匹配第一個合規(guī)則的字符串#!/usr/bin/env python # -*- coding:utf8 -*- import re #無分組 origin hello egon bcd egon lge egon acd 19 r re.match(h\w, origin) #match從起始位置開始匹配匹配成功返回一個對象未匹配成功返回None print(r.group()) # 獲取匹配到的所有結(jié)果不管有沒有分組將匹配到的全部拿出來 print(r.groups()) # 獲取模型中匹配到的分組結(jié)果只拿出匹配到的字符串中分組部分的結(jié)果 print(r.groupdict()) # 獲取模型中匹配到的分組結(jié)果只拿出匹配到的字符串中分組部分定義了key的組結(jié)果 #輸出結(jié)果 # hello 匹配到的全部拿出來 # () 沒有分組所以為空 # {} 沒分組部分定義了key的組所以為空 # 有分組 # 為何要有分組提取匹配成功的指定內(nèi)容先匹配成功全部正則再匹配成功的局部內(nèi)容提取出來 r re.match(h(\w), origin) #match從起始位置開始匹配匹配成功返回一個對象未匹配成功返回None print(r.group()) # 獲取匹配到的所有結(jié)果不管有沒有分組將匹配到的全部拿出來 print(r.groups()) # 獲取模型中匹配到的分組結(jié)果只拿出匹配到的字符串中分組部分的結(jié)果 print(r.groupdict()) # 獲取模型中匹配到的分組結(jié)果只拿出匹配到的字符串中分組部分定義了key的組結(jié)果 #輸出結(jié)果 # hello 匹配到的全部拿出來 # (ello,) 有分組在匹配到的字符串中拿出分組的部分 # {} 沒分組部分定義了key的組所以為空 # 有兩個分組定義了key # 為何要有分組提取匹配成功的指定內(nèi)容先匹配成功全部正則再匹配成功的局部內(nèi)容提取出來 r re.match((?Pn1h)(?Pn2\w), origin) #?P定義組里匹配內(nèi)容的key(鍵)里面寫key名稱值就是匹配到的內(nèi)容 print(r.group()) # 獲取匹配到的所有結(jié)果不管有沒有分組將匹配到的全部拿出來 print(r.groups()) # 獲取模型中匹配到的分組結(jié)果只拿出匹配到的字符串中分組部分的結(jié)果 print(r.groupdict()) # 獲取模型中匹配到的分組結(jié)果只拿出匹配到的字符串中分組部分定義了key的組結(jié)果 #輸出結(jié)果 # hello 匹配到的全部拿出來 # (h, ello) 有分組在匹配到的字符串中拿出分組的部分 # {n1: h, n2: ello} 有定義了key的組所以將定義了key的組里的內(nèi)容以字典形式拿出來search()函數(shù)search,瀏覽全部字符串匹配第一符合規(guī)則的字符串瀏覽整個字符串去匹配第一個未匹配成功返回Nonesearch(pattern, string, flags0)#pattern 正則模型#string 要匹配的字符串#falgs 匹配模式注意match()函數(shù) 與 search()函數(shù)基本是一樣的功能不一樣的就是match()匹配字符串開始位置的一個符合規(guī)則的字符串search()是在字符串全局匹配第一個合規(guī)則的字符串#!/usr/bin/env python # -*- coding:utf8 -*- import re #無分組 origin hello alex bcd alex lge alex acd 19 r re.search(a\w, origin) #search瀏覽全部字符串匹配第一符合規(guī)則的字符串瀏覽整個字符串去匹配第一個未匹配成功返回None print(r.group()) # 獲取匹配到的所有結(jié)果不管有沒有分組將匹配到的全部拿出來 print(r.groups()) # 獲取模型中匹配到的分組結(jié)果只拿出匹配到的字符串中分組部分的結(jié)果 print(r.groupdict()) # 獲取模型中匹配到的分組結(jié)果只拿出匹配到的字符串中分組部分定義了key的組結(jié)果 #輸出結(jié)果 # alex 匹配到的全部拿出來 # () 沒有分組所以為空 # {} 沒分組部分定義了key的組所以為空 # 有分組 # 為何要有分組提取匹配成功的指定內(nèi)容先匹配成功全部正則再匹配成功的局部內(nèi)容提取出來 r re.search(a(\w).*(\d), origin) print(r.group()) # 獲取匹配到的所有結(jié)果不管有沒有分組將匹配到的全部拿出來 print(r.groups()) # 獲取模型中匹配到的分組結(jié)果只拿出匹配到的字符串中分組部分的結(jié)果 print(r.groupdict()) # 獲取模型中匹配到的分組結(jié)果只拿出匹配到的字符串中分組部分定義了key的組結(jié)果 #輸出結(jié)果 # alex bcd alex lge alex acd 19 匹配到的全部拿出來 # (lex, 9) 有分組在匹配到的字符串中拿出分組的部分 # {} 沒分組部分定義了key的組所以為空 # 有兩個分組定義了key # 為何要有分組提取匹配成功的指定內(nèi)容先匹配成功全部正則再匹配成功的局部內(nèi)容提取出來 r re.search(a(?Pn1\w).*(?Pn2\d), origin) #?P定義組里匹配內(nèi)容的key(鍵)里面寫key名稱值就是匹配到的內(nèi)容 print(r.group()) # 獲取匹配到的所有結(jié)果不管有沒有分組將匹配到的全部拿出來 print(r.groups()) # 獲取模型中匹配到的分組結(jié)果只拿出匹配到的字符串中分組部分的結(jié)果 print(r.groupdict()) # 獲取模型中匹配到的分組結(jié)果只拿出匹配到的字符串中分組部分定義了key的組結(jié)果 #輸出結(jié)果 # alex bcd alex lge alex acd 19 匹配到的全部拿出來 # (lex, 9) 有分組在匹配到的字符串中拿出分組的部分 # {n1: lex, n2: 9} 有定義了key的組所以將定義了key的組里的內(nèi)容以字典形式拿出來findall()函數(shù)以后常用findall(pattern, string, flags0)#pattern 正則模型#string 要匹配的字符串#falgs 匹配模式瀏覽全部字符串匹配所有合規(guī)則的字符串匹配到的字符串放到一個列表中未匹配成功返回空列表注意一旦匹配成再次匹配是從前一次匹配成功的后面一位開始的也可以理解為匹配成功的字符串不在參與下次匹配#!/usr/bin/env python # -*- coding:utf8 -*- import re #無分組 r re.findall(\d\w\d, a2b3c4d5) #瀏覽全部字符串匹配所有合規(guī)則的字符串匹配到的字符串放到一個列表中 print(r) #輸出結(jié)果 #[2b3, 4d5] #注意匹配成功的字符串不在參與下次匹配,所以3c4也符合規(guī)則但是沒匹配到注意如果沒寫匹配規(guī)則也就是空規(guī)則返回的是一個比原始字符串多一位的空字符串列表#!/usr/bin/env python # -*- coding:utf8 -*- import re #無分組 r re.findall(, a2b3c4d5) #瀏覽全部字符串匹配所有合規(guī)則的字符串匹配到的字符串放到一個列表中 print(r) #輸出結(jié)果 #[, , , , , , , , ] #注意如果沒寫匹配規(guī)則也就是空規(guī)則返回的是一個比原始字符串多一位的空字符串列表 復(fù)制代碼注意正則匹配到空字符的情況如果規(guī)則里只有一個組而組后面是就表示組里的內(nèi)容可以是0個或者多過這樣組里就有了兩個意思一個意思是匹配組里的內(nèi)容二個意思是匹配組里0內(nèi)容即是空白所以盡量避免用否則會有可能匹配出空字符串注意正則只拿組里最后一位如果規(guī)則里只有一個組匹配到的字符串里在拿組內(nèi)容是拿的是匹配到的內(nèi)容最后一位#!/usr/bin/env python # -*- coding:utf8 -*- import re origin hello alex bcd alex lge alex acd 19 r re.findall((a)*, origin) print(r) #輸出結(jié)果 [, , , , , , a, , , , , , , , , a, , , , , , , , , a, , , , , a, , , , , , ]無分組匹配所有合規(guī)則的字符串匹配到的字符串放到一個列表中#!/usr/bin/env python # -*- coding:utf8 -*- import re #無分組 origin hello alex bcd alex lge alex acd 19 r re.findall(a\w, origin) #瀏覽全部字符串匹配所有合規(guī)則的字符串匹配到的字符串放到一個列表中 print(r) #輸出結(jié)果 #[alex, alex, alex, acd] #匹配所有合規(guī)則的字符串匹配到的字符串放到一個列表中 復(fù)制代碼有分組只將匹配到的字符串里組的部分放到列表里返回相當(dāng)于groups()方法#!/usr/bin/env python # -*- coding:utf8 -*- import re origin hello alex bcd alex lge alex acd 19 r re.findall(a(\w), origin) #有分組只將匹配到的字符串里組的部分放到列表里返回 print(r) #輸出結(jié)果 #[lex, lex, lex, cd]多個分組只將匹配到的字符串里組的部分放到一個元組中最后將所有元組放到一個列表里返相當(dāng)于在group()結(jié)果里再將組的部分分別拿出來放入一個元組最后將所有元組放入一個列表返回#!/usr/bin/env python # -*- coding:utf8 -*- import re origin hello alex bcd alex lge alex acd 19 r re.findall((a)(\w), origin) #多個分組只將匹配到的字符串里組的部分放到一個元組中最后將所有元組放到一個列表里返回 print(r) #輸出結(jié)果 #[(a, lex), (a, lex), (a, lex), (a, cd)]分組中有分組只將匹配到的字符串里組的部分放到一個元組中先將包含有組的組看作一個整體也就是一個組把這個整體組放入一個元組里然后在把組里的組放入一個元組最后將所有組放入一個列表返回#!/usr/bin/env python # -*- coding:utf8 -*- import re origin hello alex bcd alex lge alex acd 19 r re.findall((a)(\w(e)), origin) #分組中有分組只將匹配到的字符串里組的部分放到一個元組中先將包含有組的組看作一個整體也就是一個組把這個整體組放入一個元組里然后在把組里的組放入一個元組最后將所有組放入一個列表返回 print(r) #輸出結(jié)果 #[(a, le, e), (a, le, e), (a, le, e)]?:在有分組的情況下findall()函數(shù)不只拿分組里的字符串拿所有匹配到的字符串注意?:只用于不是返回正則對象的函數(shù)如findall()#!/usr/bin/env python # -*- coding:utf8 -*- import re origin hello alex bcd alex lge alex acd 19 b re.findall(a(?:\w),origin) #?:在有分組的情況下不只拿分組里的字符串拿所有匹配到的字符串注意?:只用于不是返回正則對象的函數(shù)如findall() print(b) #輸出 # [alex, alex, alex, acd]split()函數(shù)根據(jù)正則匹配分割字符串返回分割后的一個列表split(pattern, string, maxsplit0, flags0)#pattern 正則模型#string 要匹配的字符串#maxsplit指定分割個數(shù)#flags 匹配模式按照一個字符將全部字符串進(jìn)行分割#!/usr/bin/env python # -*- coding:utf8 -*- import re origin hello alex bcd alex lge alex acd 19 r re.split(a, origin) #根據(jù)正則匹配分割字符串 print(r) #輸出結(jié)果 [hello , lex bcd , lex lge , lex , cd 19] #根據(jù)a進(jìn)行分組將匹配到的字符串作為分割標(biāo)準(zhǔn)進(jìn)行分割#!/usr/bin/env python # -*- coding:utf8 -*- import re origin hello alex bcd alex lge alex 2acd 19 r re.split(a\w, origin) #根據(jù)正則匹配分割字符串 print(r) #輸出結(jié)果 [hello , bcd , lge , 2, 19] #將匹配到的字符串作為分割標(biāo)準(zhǔn)進(jìn)行分割 復(fù)制代碼sub()函數(shù)替換匹配成功的指定位置字符串sub(pattern, repl, string, count0, flags0)#pattern 正則模型#repl 要替換的字符串#string 要匹配的字符串#count 指定匹配個數(shù)#flags 匹配模式#!/usr/bin/env python # -*- coding:utf8 -*- import re origin hello alex bcd alex lge alex acd 19 r re.sub(a,替換,origin) #替換匹配成功的指定位置字符串 print(r) #輸出 # hello 替換lex bcd 替換lex lge 替換lex 替換cd 19subn()函數(shù)替換匹配成功的指定位置字符串,并且返回替換次數(shù)可以用兩個變量分別接受subn(pattern, repl, string, count0, flags0)#pattern 正則模型#repl 要替換的字符串#string 要匹配的字符串#count 指定匹配個數(shù)#flags 匹配模式#!/usr/bin/env python # -*- coding:utf8 -*- import re origin hello alex bcd alex lge alex acd 19 a,b re.subn(a,替換,origin) #替換匹配成功的指定位置字符串,并且返回替換次數(shù)可以用兩個變量分別接受 print(a) print(b) #輸出 # hello 替換lex bcd 替換lex lge 替換lex 替換cd 19 # 4常用. 默認(rèn)匹配除\n之外的任意一個字符若指定flag DOTALL,則匹配任意字符包括換行 ^ 匹配字符開頭若指定flags MULTILINE,這種也可以匹配上(r^a,\nabc\neee,flagsre.MULTILINE) $ 匹配字符結(jié)尾或e.search(foo$,bfoo\nsdfsf,flagsre.MULTILINE).group()也可以 * 匹配*號前的字符0次或多次re.findall(ab*,cabb3abcbbac) 結(jié)果為[abb, ab, a] 匹配前一個字符1次或多次re.findall(ab,abcdabbbba) 結(jié)果[ab, abb] ? 匹配前一個字符1次或0次 {m} 匹配前一個字符m次 {n,m} 匹配前一個字符n到m次re.findall(ab{1,3},abb abc abbcbbb) 結(jié)果abb, ab, abb] | 匹配|左或|右的字符re.search(abc|ABC,ABCBabcCD).group() 結(jié)果ABC (...) 分組匹配re.search((abc){2}a(123|456)c, abcabca456c).group() 結(jié)果 abcabca456c \A 只從字符開頭匹配re.search(\Aabc,alexabc) 是匹配不到的 \Z 匹配字符結(jié)尾同$ \d 匹配數(shù)字0-9 \D 匹配非數(shù)字 \w 匹配[A-Za-z0-9] \W 匹配非[A-Za-z0-9] s 匹配空白字符、\t、\n、\r , re.search(\s,ab\tc1\n3).group() 結(jié)果 \t (?Pname...) 分組匹配 re.search((?Pprovince[0-9]{4})(?Pcity[0-9]{2})(?Pbirthday[0-9]{4}),371481199306143242).groupdict(city) 結(jié)果{province: 3714, city: 81, birthday: 1993}正則表達(dá)式重點:一、r原生字符將在python里有特殊意義的字符如\b轉(zhuǎn)換成原生字符就是去除它在python的特殊意義不然會給正則表達(dá)式有沖突為了避免這種沖突可以在規(guī)則前加原始字符r二、正則表達(dá)式返回類型為表達(dá)式對象的如_sre.SRE_Match object; span(6, 7), match‘a(chǎn)’返回對象的需要用正則方法取字符串方法有g(shù)roup() # 獲取匹配到的所有結(jié)果不管有沒有分組將匹配到的全部拿出來有參取匹配到的第幾個如2groups() # 獲取模型中匹配到的分組結(jié)果只拿出匹配到的字符串中分組部分的結(jié)果groupdict() # 獲取模型中匹配到的分組結(jié)果只拿出匹配到的字符串中分組部分定義了key的組結(jié)果三、匹配到的字符串里出現(xiàn)空字符注意正則匹配到空字符的情況如果規(guī)則里只有一個組而組后面是就表示組里的內(nèi)容可以是0個或者多過這樣組里就有了兩個意思一個意思是匹配組里的內(nèi)容二個意思是匹配組里0內(nèi)容即是空白所以盡量避免用否則會有可能匹配出空字符串四、()分組注意分組的意義就是在匹配成功的字符串中在提取()里組里面的字符串五、?:在有分組的情況下findall()函數(shù)不只拿分組里的字符串拿所有匹配到的字符串注意?:只用于不是返回正則對象的函數(shù)如findall()

相關(guān)新聞

企業(yè)裁員賠償方案設(shè)計與實施全解析

企業(yè)裁員賠償方案設(shè)計與實施全解析

1. 企業(yè)人員調(diào)整背后的經(jīng)濟邏輯最近某大型企業(yè)宣布裁員6.4萬余人的消息引發(fā)廣泛關(guān)注,其中"N4"的高額賠償方案更是成為討論焦點。作為經(jīng)歷過多次企業(yè)組織調(diào)整的HR從業(yè)者,我想從實際操作層面解析這類大規(guī)模人員調(diào)整背后的決策邏輯和執(zhí)行細(xì)節(jié)。企…

2026/7/28 19:26:40 閱讀更多
零代碼改造Codex:低成本接入DeepSeek實現(xiàn)高效AI編程

零代碼改造Codex:低成本接入DeepSeek實現(xiàn)高效AI編程

如果你正在使用 Codex 作為 AI 編程助手,但覺得官方模型調(diào)用成本太高,或者希望獲得更符合中文開發(fā)者習(xí)慣的代碼建議,那么這篇文章就是為你準(zhǔn)備的。Codex 本身是一個強大的 AI 編程工具,但其默認(rèn)的官方模型(如 GPT-4&am…

2026/7/28 19:26:40 閱讀更多
NBM7100A電池增強器在物聯(lián)網(wǎng)節(jié)點的能效優(yōu)化實踐

NBM7100A電池增強器在物聯(lián)網(wǎng)節(jié)點的能效優(yōu)化實踐

1. 項目背景與核心挑戰(zhàn)在物聯(lián)網(wǎng)設(shè)備井噴式發(fā)展的今天,無線傳感器節(jié)點作為數(shù)據(jù)采集的神經(jīng)末梢,其供電問題始終是制約設(shè)備部署的關(guān)鍵瓶頸。我曾參與過一個農(nóng)業(yè)環(huán)境監(jiān)測項目,當(dāng)看到300個傳感器節(jié)點中有23%因電池耗盡提前"陣亡"時&…

2026/7/28 19:26:40 閱讀更多
性價比高的重金屬檢測相關(guān)抗原抗體優(yōu)質(zhì)源頭廠家

性價比高的重金屬檢測相關(guān)抗原抗體優(yōu)質(zhì)源頭廠家

咱搞重金屬檢測的,找合適的抗原抗體源頭廠家可太重要了。我深耕重金屬檢測相關(guān)抗原抗體垂類5年了,對這行業(yè)的情況門兒清。先跟大家嘮嘮這行業(yè)的痛點。對高校和科研院所來說,進(jìn)口的微球、納米材料供貨周期長,物流要是有點波動&…

2026/7/29 9:56:24 閱讀更多
無人機三維路徑規(guī)劃的NMOPSO算法與MATLAB實現(xiàn)

無人機三維路徑規(guī)劃的NMOPSO算法與MATLAB實現(xiàn)

1. 項目背景與核心挑戰(zhàn) 城市場景下的無人機三維路徑規(guī)劃是當(dāng)前智能交通和物流配送領(lǐng)域的前沿課題。隨著2025年城市空中交通(UAM)概念的逐步落地,無人機需要在復(fù)雜的建筑群環(huán)境中實現(xiàn)安全、高效的自主飛行。這個過程中面臨三個核心挑戰(zhàn)&#x…

2026/7/29 9:56:24 閱讀更多
安卓手機粵語錄音轉(zhuǎn)文字怎么實現(xiàn)?4款實用軟件功能對比與使用指南

安卓手機粵語錄音轉(zhuǎn)文字怎么實現(xiàn)?4款實用軟件功能對比與使用指南

在大灣區(qū)工作或與粵語區(qū)客戶溝通的職場人,經(jīng)常遇到這樣的困擾:會議全程用粵語交流,錄音后手動整理不僅耗時耗力,還容易因為方言理解偏差導(dǎo)致信息遺漏。普通的錄音轉(zhuǎn)文字軟件對普通話識別效果不錯,但一遇到粵語就頻頻出…

2026/7/29 9:56:24 閱讀更多
基于 openEuler+MySQL8.0 + 騰訊云 TokenHub 大模型搭建電商 NL2SQL 智能調(diào)優(yōu)工具

基于 openEuler+MySQL8.0 + 騰訊云 TokenHub 大模型搭建電商 NL2SQL 智能調(diào)優(yōu)工具

一、項目實施全流程 1.1openEuler 系統(tǒng)初始化配置 1.1.1 系統(tǒng)安全與網(wǎng)絡(luò)優(yōu)化 剛裝好 openEuler 系統(tǒng),防火墻、SELinux 會攔截端口訪問,時間同步錯亂,先做系統(tǒng)基礎(chǔ)優(yōu)化。 1.1.2 源碼編譯 Python3.11.9 1.下載源碼包上傳至/usr/local/src&…

2026/7/29 9:56:24 閱讀更多
共筑國產(chǎn) FPGA 生態(tài)!ALINX 攜車載視頻解決方案亮相 2026 紫光同創(chuàng)開發(fā)者大會

共筑國產(chǎn) FPGA 生態(tài)!ALINX 攜車載視頻解決方案亮相 2026 紫光同創(chuàng)開發(fā)者大會

以“算力重構(gòu)、智創(chuàng)無界”為主題的“2026紫光同創(chuàng)開發(fā)者大會”深圳站與成都站圓滿落幕。本次大會匯聚了來自通信網(wǎng)絡(luò)、工業(yè)控制、汽車電子、數(shù)據(jù)中心、邊緣AI、測試測量等領(lǐng)域的 300 余名工程師、行業(yè)伙伴與生態(tài)開發(fā)者,圍繞國產(chǎn) FPGA 技術(shù)創(chuàng)新、AI 推理系統(tǒng)方案、工…

2026/7/29 9:46:23 閱讀更多
面試官大笑:“一個任務(wù)拆給 5 個 Subagent 并行跑,不比 1 個快 5 倍?“我搖頭:“快不了,還可能更慢“

面試官大笑:“一個任務(wù)拆給 5 個 Subagent 并行跑,不比 1 個快 5 倍?“我搖頭:“快不了,還可能更慢“

前兩個月,我在重構(gòu) AlgoMooc 網(wǎng)站過程中,發(fā)現(xiàn)一個問題:在 Claude Code 里把一個任務(wù)拆給 5 個 Subagent 并行跑,結(jié)果可能比 1 個 agent 從頭干到尾還慢? 大多數(shù)人的第一反應(yīng)是反過來的:活是并行干的&#…

2026/7/29 0:15:24 閱讀更多
# 鴻蒙 HarmonyOS 應(yīng)用開發(fā)實戰(zhàn)(第25期)|骰子(Dice Roller)— Unicode 符號與動畫渲染精講

# 鴻蒙 HarmonyOS 應(yīng)用開發(fā)實戰(zhàn)(第25期)|骰子(Dice Roller)— Unicode 符號與動畫渲染精講

一、應(yīng)用概述 骰子(Dice Roller) 是一款經(jīng)典的休閑娛樂應(yīng)用,模擬了真實擲骰子的過程。應(yīng)用投擲兩個骰子(六面標(biāo)準(zhǔn)骰),使用 Unicode 骰面符號直觀展示每個骰子的點數(shù),并伴有快速滾動的動畫效果?!?/p>

2026/7/29 0:15:24 閱讀更多