python  -------re模塊
正則表達式正則表達式本身是一種小型的、高度專業(yè)化的編程語言而在python中通過內(nèi)嵌集成re模塊程序員們可以直接調(diào)用來實現(xiàn)正則匹配。正則表達式模式被編譯成一系列的字節(jié)碼然后由用C編寫的匹配引擎執(zhí)行。正則表達式是用來匹配處理字符串的 python 中使用正則表達式需要引入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匹配任何十進制數(shù)它相當于類[0-9]#!/usr/bin/env python# -*- coding:utf-8 -*- import re #第一步要引入re模塊 a re.findall(\d, 匹配規(guī)則這2個字符串3是否匹配規(guī)則5則則則7則) #\d匹配任何十進制數(shù)它相當于類[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ù)字字符它相當于類[^0-9]#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模塊 a re.findall(\D, 匹配規(guī)則這2個字符串3是否匹配規(guī)則5則則則7則) #\D匹配任何非數(shù)字字符它相當于類[^0-9] print(a) #以列表形式返回匹配到的字符串 #打印出 [匹, 配, 規(guī), 則, 這, 個, 字, 符, 串, 是, 否, 匹, 配, 規(guī), 則, 則, 則, 則, 則]\s 匹配任何空白字符它相當于類[\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匹配任何空白字符它相當于類[\t\n\r\f\v] print(a) #以列表形式返回匹配到的字符串 #打印出[ , , , \n]\S 匹配任何非空白字符它相當于類[^\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匹配任何非空白字符它相當于類[^\t\n\r\f\v] print(a) #以列表形式返回匹配到的字符串 #打印出 [匹, 配, 規(guī), 則, 這, 2, 個, 字, 符, 串, 3, 是, 否, 匹, 配, 規(guī), 則, 5, 則, 則, 則, 7, 則]\w 匹配包括下劃線在內(nèi)任何字母數(shù)字字符它相當于類[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ù)字字符它相當于類[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)它相當于類[^a-zA-Z0-9_]import re #第一步要引入re模塊 a re.findall(\W,https://www.cnblogs.com/) #\w匹配包括下劃線在內(nèi)任何字母數(shù)字字符它相當于類[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的特殊意義不然會給正則表達式有沖突為了避免這種沖突可以在規(guī)則前加原始字符rre模塊中常用功能函數(shù)正則表達式有兩種書寫方式一種是直接在函數(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ù)制代碼有分組只將匹配到的字符串里組的部分放到列表里返回相當于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]多個分組只將匹配到的字符串里組的部分放到一個元組中最后將所有元組放到一個列表里返相當于在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 匹配模式按照一個字符將全部字符串進行分割#!/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進行分組將匹配到的字符串作為分割標準進行分割#!/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] #將匹配到的字符串作為分割標準進行分割 復(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常用. 默認匹配除\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}正則表達式重點:一、r原生字符將在python里有特殊意義的字符如\b轉(zhuǎn)換成原生字符就是去除它在python的特殊意義不然會給正則表達式有沖突為了避免這種沖突可以在規(guī)則前加原始字符r二、正則表達式返回類型為表達式對象的如_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í)行細節(jié)。企…

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

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

如果你正在使用 Codex 作為 AI 編程助手,但覺得官方模型調(diào)用成本太高,或者希望獲得更符合中文開發(fā)者習(xí)慣的代碼建議,那么這篇文章就是為你準備的。Codex 本身是一個強大的 AI 編程工具,但其默認的官方模型(如 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)測項目,當看到300個傳感器節(jié)點中有23%因電池耗盡提前"陣亡"時&…

2026/7/28 19:26:40 閱讀更多
python爬取貝殼中二手房的數(shù)據(jù)

python爬取貝殼中二手房的數(shù)據(jù)

前言:通過代碼爬取貝殼中二手房的數(shù)據(jù),以此給更多需要了解爬蟲或者二手房信息的人提供便利。 第一部分:爬取地址 1.1貝殼首頁地址 jiujiang.ke.com 第二部分:爬取數(shù)據(jù) 2.1輸入要爬多少頁 int(input(輸入一共要多少頁&#xf…

2026/7/29 4:26:03 閱讀更多
從零吃透C語言數(shù)組基礎(chǔ)!告別新手報錯,小白看完直接上手

從零吃透C語言數(shù)組基礎(chǔ)!告別新手報錯,小白看完直接上手

從零吃透C語言數(shù)組基礎(chǔ)!告別新手報錯,小白看完直接上手 ** 學(xué)完C語言函數(shù)之后,我本以為自己已經(jīng)入門了,寫個簡單計算、循環(huán)代碼都不在話下。結(jié)果沒過兩天就遇到了新難題:需要一次性存儲幾十個學(xué)生的成績,挨…

2026/7/29 4:26:03 閱讀更多
學(xué)習(xí)日記 7.28

學(xué)習(xí)日記 7.28

在機器學(xué)習(xí)的學(xué)習(xí)之路上,線性回歸和邏輯回歸是兩塊重要的基石。今天我們將通過兩個實戰(zhàn)案例,從理論到代碼,全面掌握這兩種算法的應(yīng)用:案例一:多元線性回歸 —— 根據(jù)體重和年齡預(yù)測血壓收縮壓;案例二&#…

2026/7/29 4:26:03 閱讀更多
AI數(shù)字人口播訓(xùn)練全周期,從唇形同步誤差<0.3幀到通過抖音AIGC白名單認證

AI數(shù)字人口播訓(xùn)練全周期,從唇形同步誤差<0.3幀到通過抖音AIGC白名單認證

更多請點擊: https://intelliparadigm.com 第一章:AI數(shù)字人口播訓(xùn)練全周期概覽 AI數(shù)字人口播訓(xùn)練是一項融合語音合成、表情驅(qū)動、語義理解與多模態(tài)對齊的系統(tǒng)性工程,其全周期涵蓋數(shù)據(jù)準備、模型微調(diào)、驅(qū)動策略設(shè)計、實時渲染優(yōu)化及效果評估五…

2026/7/29 4:26:03 閱讀更多
嵌入式設(shè)備與云端安全連接方案及優(yōu)化技巧

嵌入式設(shè)備與云端安全連接方案及優(yōu)化技巧

1. 項目背景與硬件選型解析當我們需要在嵌入式設(shè)備與云端建立安全連接時,硬件平臺的選擇直接影響著整個系統(tǒng)的性能和可靠性。這個項目中選用的A5000顯卡和TM4C123GH6PZ微控制器組合,恰好覆蓋了從邊緣計算到云端協(xié)同的全鏈路需求。NVIDIA RTX A5000作為?!?/p>

2026/7/29 4:16:02 閱讀更多
面試官大笑:“一個任務(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)用投擲兩個骰子(六面標準骰),使用 Unicode 骰面符號直觀展示每個骰子的點數(shù),并伴有快速滾動的動畫效果?!?/p>

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