一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Python基礎(chǔ)必掌握的re模塊支持的元字符9類使用詳解

 excel05 2022-06-15 發(fā)布于福建

元字符(Meta Characters)是正則表達(dá)式中具有特殊意義的專用字符,Python中是用來指明前導(dǎo)字符(位于元字符前的字符)在目標(biāo)對象中的出現(xiàn)模式。

元字符是正則表達(dá)式最核心和基本的概念

整套學(xué)習(xí)自學(xué)教程中應(yīng)用的數(shù)據(jù)都是《三國志》、《真·三國無雙》系列游戲中的內(nèi)容。

文章圖片1

正則表達(dá)式元字符

文章圖片2

在正則表達(dá)式中,方括號(hào) ( [] ) 中指定的一組字符組成一個(gè)字符類。

元字符序列匹配類中的任何單個(gè)字符。

s = 'Dynasty123Dynasty'# 3個(gè)任意連續(xù)字符匹配re.search('[0-9][0-9][0-9]', s)<_sre.SRE_Match object; span=(7, 10), match='123'>re.search('[0-9][0-9][0-9]', 'Dynasty456Dynasty')<_sre.SRE_Match object; span=(7, 10), match='456'>re.search('[0-9][0-9][0-9]', '234baz')<_sre.SRE_Match object; span=(0, 3), match='234'>re.search('[0-9][0-9][0-9]', 'qux678')<_sre.SRE_Match object; span=(3, 6), match='678'># 匹配不上的情況print(re.search('[0-9][0-9][0-9]', '12Dynasty34'))None

通配符點(diǎn) ( . ) 元字符匹配除換行符以外的任何字符。

s = 'Dynasty123Dynasty're.search('1.3', s)<_sre.SRE_Match object; span=(7, 10), match='123'>s = 'Dynasty13Dynasty'print(re.search('1.3', s))None

re模塊支持的元字符

文章圖片3

下面列表都是元字符的描述,對元字符進(jìn)行分類描述方便記憶。 這個(gè)要是看不懂直接跳過看下面的例子。

字符

描述

\

將下一個(gè)字符標(biāo)記為一個(gè)特殊字符、或一個(gè)原義字符、或一個(gè) 向后引用、獲得一個(gè)八進(jìn)制轉(zhuǎn)義符。例如,'n' 匹配字符 'n'。'\n' 匹配一個(gè)換行符。序列 '\' 匹配 '\' 而 '(' 則匹配 '('。

^

匹配輸入字符串的開始位置。如果設(shè)置了 RegExp 對象的 Multiline 屬性,^ 也匹配 '\n' 或 '\r' 之后的位置。

$

匹配輸入字符串的結(jié)束位置。如果設(shè)置了RegExp 對象的 Multiline 屬性,$ 也匹配 '\n' 或 '\r' 之前的位置。

*

匹配前面的子表達(dá)式零次或多次。例如,zo 能匹配 'z' 以及 'zoo'。 等價(jià)于{0,}。

+

匹配前面的子表達(dá)式一次或多次。例如,'zo+' 能匹配 'zo' 以及 'zoo',但不能匹配 'z'。+ 等價(jià)于 {1,}。

?

匹配前面的子表達(dá)式零次或一次。例如,'do(es)?' 可以匹配 'do' 或 'does' 。? 等價(jià)于 {0,1}。

{n}

n 是一個(gè)非負(fù)整數(shù)。匹配確定的 n 次。例如,'o{2}' 不能匹配 'Bob' 中的 'o',但是能匹配 'Dynastyd' 中的兩個(gè) o。

{n,}

n 是一個(gè)非負(fù)整數(shù)。至少匹配n 次。例如,'o{2,}' 不能匹配 'Bob' 中的 'o',但能匹配 'Dynastyoood' 中的所有 o。'o{1,}' 等價(jià)于 'o+'。'o{0,}' 則等價(jià)于 'o*'。

{n,m}

m 和 n 均為非負(fù)整數(shù),其中n <= m。最少匹配 n 而且最多匹配 m 次。例如,'o{1,3}' 將匹配 'Dynastyooood' 中的前三個(gè) o。'o{0,1}' 等價(jià)于 'o?'。請注意在逗號(hào)和兩個(gè)數(shù)字之間不能有空格。

?

當(dāng)該字符緊跟在任何一個(gè)其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面時(shí),匹配模式是非常貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認(rèn)的貪婪模式則盡可能多地匹配所搜索的字符串。例如,對于字符串 'oooo','o+?' 將匹配單個(gè) 'o',而 'o+' 將匹配所有 'o'。

.

匹配除換行符(\n、\r)之外的任何單個(gè)字符。要匹配包括 '\n' 在內(nèi)的任何字符,請使用像'(.

x|y

匹配 x 或 y。例如,'z

[xyz]

字符集合。匹配所包含的任意一個(gè)字符。例如, '[abc]' 可以匹配 'plain' 中的 'a'。

[^xyz]

負(fù)值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 'plain' 中的'p'、'l'、'i'、'n'。

[a-z]

字符范圍。匹配指定范圍內(nèi)的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范圍內(nèi)的任意小寫字母字符。

[^a-z]

負(fù)值字符范圍。匹配任何不在指定范圍內(nèi)的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范圍內(nèi)的任意字符。

\b

匹配一個(gè)單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配'never' 中的 'er',但不能匹配 'verb' 中的 'er'。

\B

匹配非單詞邊界。'er\B' 能匹配 'verb' 中的 'er',但不能匹配 'never' 中的 'er'。

\cx

匹配由 x 指明的控制字符。例如, \cM 匹配一個(gè) Control-M 或回車符。x 的值必須為 A-Z 或 a-z 之一。否則,將 c 視為一個(gè)原義的 'c' 字符。

\d

匹配一個(gè)數(shù)字字符。等價(jià)于 [0-9]。

\D

匹配一個(gè)非數(shù)字字符。等價(jià)于 [^0-9]。

\f

匹配一個(gè)換頁符。等價(jià)于 \x0c 和 \cL。

\n

匹配一個(gè)換行符。等價(jià)于 \x0a 和 \cJ。

\r

匹配一個(gè)回車符。等價(jià)于 \x0d 和 \cM。

\s

匹配任何空白字符,包括空格、制表符、換頁符等等。等價(jià)于 [ \f\n\r\t\v]。

\S

匹配任何非空白字符。等價(jià)于 [^ \f\n\r\t\v]。

\t

匹配一個(gè)制表符。等價(jià)于 \x09 和 \cI。

\v

匹配一個(gè)垂直制表符。等價(jià)于 \x0b 和 \cK。

\w

匹配字母、數(shù)字、下劃線。等價(jià)于'[A-Za-z0-9_]'。

\W

匹配非字母、數(shù)字、下劃線。等價(jià)于 '[^A-Za-z0-9_]'。

\xn

匹配 n,其中 n 為十六進(jìn)制轉(zhuǎn)義值。十六進(jìn)制轉(zhuǎn)義值必須為確定的兩個(gè)數(shù)字長。例如,'\x41' 匹配 'A'。'\x041' 則等價(jià)于 '\x04' & '1'。正則表達(dá)式中可以使用 ASCII 編碼。

\num

匹配 num,其中 num 是一個(gè)正整數(shù)。對所獲取的匹配的引用。例如,'(.)\1' 匹配兩個(gè)連續(xù)的相同字符。

\n

標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義值或一個(gè)向后引用。如果 \n 之前至少 n 個(gè)獲取的子表達(dá)式,則 n 為向后引用。否則,如果 n 為八進(jìn)制數(shù)字 (0-7),則 n 為一個(gè)八進(jìn)制轉(zhuǎn)義值。

\nm

標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義值或一個(gè)向后引用。如果 \nm 之前至少有 nm 個(gè)獲得子表達(dá)式,則 nm 為向后引用。如果 \nm 之前至少有 n 個(gè)獲取,則 n 為一個(gè)后跟文字 m 的向后引用。如果前面的條件都不滿足,若 n 和 m 均為八進(jìn)制數(shù)字 (0-7),則 \nm 將匹配八進(jìn)制轉(zhuǎn)義值 nm。

\nml

如果 n 為八進(jìn)制數(shù)字 (0-3),且 m 和 l 均為八進(jìn)制數(shù)字 (0-7),則匹配八進(jìn)制轉(zhuǎn)義值 nml。

\un

匹配 n,其中 n 是一個(gè)用四個(gè)十六進(jìn)制數(shù)字表示的 Unicode 字符。例如, \u00A9 匹配版權(quán)符號(hào) (?)。

類別1:匹配單個(gè)字符的元字符

方括號(hào)( [] ) 字符集

指定要匹配的特定字符集。 字符類元字符序列將匹配該類中包含的任何單個(gè)字符。

# 元字符序列[nasty]匹配任何單個(gè)'n'、'a'、's''t''y'字符re.search('Dy[nasty]', 'DynastyDynastyzz')<_sre.SRE_Match object; span=(0, 3), match='Dyn'>

匹配和[a-z]之間的任何小寫字母字符。

re.search('[a-z]', 'DynastyDynasty')<_sre.SRE_Match object; span=(1, 2), match='y'>

匹配和[0-9]之間任何數(shù)字字符。

re.search('[0-9][0-9]', 'Dynasty123Dynasty')<_sre.SRE_Match object; span=(7, 9), match='12'>

[0-9a-fA-F]匹配任何十六進(jìn)制數(shù)字字符。

re.search('[0-9a-fA-f]', '--- a0 ---')<_sre.SRE_Match object; span=(4, 5), match='a'>

[^0-9]匹配任何不是數(shù)字的字符開頭的字符。

re.search('[^0-9]', '12345Dynasty')<_sre.SRE_Match object; span=(5, 6), match='D'>

如果一個(gè)^字符出現(xiàn)在字符類中但不是第一個(gè)字符則無結(jié)果。

re.search('[#:^]', 'Dynasty^Dynasty:D#d')<_sre.SRE_Match object; span=(7, 8), match='^'>

可以通過用連字符分隔字符來指定字符類中的字符范圍,可以將其作為第一個(gè)或最后一個(gè)字符放置,或者使用反斜杠 ( \ ) 對其進(jìn)行轉(zhuǎn)義。

# 直接查找符號(hào)re.search('[-abc]', '123-456')<_sre.SRE_Match object; span=(3, 4), match='-'>re.search('[abc-]', '123-456')<_sre.SRE_Match object; span=(3, 4), match='-'>re.search('[ab\-c]', '123-456')<_sre.SRE_Match object; span=(3, 4), match='-'># 查找轉(zhuǎn)義符號(hào)re.search('[]]', 'Dynasty[1]')<_sre.SRE_Match object; span=(9, 10), match=']'>re.search('[ab\]cd]', 'Dynasty[1]')<_sre.SRE_Match object; span=(3, 4), match='a'># [ ] 內(nèi)的元字符失去意義轉(zhuǎn)義成字符處理re.search('[)*+|]', '123*456')<_sre.SRE_Match object; span=(3, 4), match='*'>re.search('[)*+|]', '123+456')<_sre.SRE_Match object; span=(3, 4), match='+'>

點(diǎn) ( . ) 通配符

匹配除換行符以外的任何單個(gè)字符。

re.search('Dynasty.Dynasty', 'DynastyxDynasty')<_sre.SRE_Match object; span=(0, 15), match='DynastyxDynasty'>print(re.search('Dynasty.Dynasty', 'DynastyDynasty'))Noneprint(re.search('Dynasty.Dynasty', 'Dynasty\nDynasty'))Noneprint(re.search('Dynasty.Dynasty', 'DynastysDynasty'))<_sre.SRE_Match object; span=(0, 15), match='DynastysDynasty'>

\w 和 \W 單詞字符匹配

\w匹配任何字母數(shù)字字符,單詞字符是大寫和小寫字母、數(shù)字和下劃線 ( _) 字符。

\w 等于 [a-zA-Z0-9_] 。

re.search('\w', '#(.a$@&')<_sre.SRE_Match object; span=(3, 4), match='a'>re.search('[a-zA-Z0-9_]', '#(.a$@&')<_sre.SRE_Match object; span=(3, 4), match='a'>

\W是相反的。它匹配任何非單詞字符。

\W 等于 [^a-zA-Z0-9_] 。

re.search('\W', 'a_1*3Qb')<_sre.SRE_Match object; span=(3, 4), match='*'>re.search('[^a-zA-Z0-9_]', 'a_1*3Qb')<_sre.SRE_Match object; span=(3, 4), match='*'>

\d 和 \D 字符十進(jìn)制數(shù)字匹配

\d匹配任何十進(jìn)制數(shù)字字符,等價(jià)于[0-9]。

re.search('\d', 'abc4def')<_sre.SRE_Match object; span=(3, 4), match='4'>

\D匹配任何不是十進(jìn)制數(shù)字的字符,等價(jià)于[^0-9]。

re.search('\D', '234Q678')<_sre.SRE_Match object; span=(3, 4), match='Q'>

\s 和 \S 字符空格匹配

\s匹配任何空白字符,同時(shí)也匹配換行符。

re.search('\s', 'Dynasty\nDynasty')<_sre.SRE_Match object; span=(3, 4), match='\n'>

\S匹配任何不是空格的字符。

re.search('\S', '  \n Dynasty  \n  ')<_sre.SRE_Match object; span=(4, 5), match='D'>

混合使用 \w, \W, \d, \D, \s, 和\S

字符類序列\(zhòng)w, \W, \d, \D, \s, 和\S也可以出現(xiàn)在方括號(hào)字符類中。

# [\d\w\s]匹配任何數(shù)字、單詞或空白字符re.search('[\d\w\s]', '---3---')<_sre.SRE_Match object; span=(3, 4), match='3'>re.search('[\d\w\s]', '---a---') <_sre.SRE_Match object; span=(3, 4), match='a'>re.search('[\d\w\s]', '--- ---')<_sre.SRE_Match object; span=(3, 4), match=' '># 由于\w包含\d,相同的字符類也可以表示為略短[\w\s]re.search('[\w\s]', '---a---')<_sre.SRE_Match object; span=(3, 4), match='a'>re.search('[\w\s]', '--- ---')<_sre.SRE_Match object; span=(3, 4), match=' '>

類別2:轉(zhuǎn)義元字符

反斜杠 ( \ ) 轉(zhuǎn)義元字符

反斜杠會(huì)刪除元字符的特殊含義。

re.search('.', 'Dynasty.Dynasty')<_sre.SRE_Match object; span=(0, 1), match='D'>re.search('\.', 'Dynasty.Dynasty') # 非通配符<_sre.SRE_Match object; span=(7, 8), match='.'>re.search(r'\\', 'Dynasty\Dynasty')<_sre.SRE_Match object; span=(7, 8), match='\\'>

類別3:錨點(diǎn)

不匹配搜索字符串中的任何實(shí)際字符,并且在解析期間它們不使用任何搜索字符串。指示搜索字符串中必須發(fā)生匹配的特定位置。

^ 和 \A 字符串的開頭匹配項(xiàng)

re.search('^Dynasty', 'DynastyDynasty')<_sre.SRE_Match object; span=(0, 7), match='Dynasty'>re.search('\ADynasty', 'DynastyDynasty')<_sre.SRE_Match object; span=(0, 7), match='Dynasty'>

$ 和\Z 字符串的結(jié)尾匹配項(xiàng)

re.search('Dynasty$', 'DynastyDynasty')<_sre.SRE_Match object; span=(7, 14), match='Dynasty'>print(re.search('Dynasty$', 'DynastyDynasty'))<_sre.SRE_Match object; span=(7, 14), match='Dynasty'>re.search('Dynasty\Z', 'DynastyDynasty')<_sre.SRE_Match object; span=(7, 14), match='Dynasty'>print(re.search('Dynasty\Z', 'DynastyDynasty'))<_sre.SRE_Match object; span=(7, 14), match='Dynasty'># 特殊$也在搜索字符串末尾的單個(gè)換行符之前匹配re.search('Dynasty$', 'DynastyDynasty\n')<_sre.SRE_Match object; span=(7, 14), match='Dynasty'>

\b 和 \B 單詞匹配

\b 必須在單詞的開頭或結(jié)尾。

# 單詞開頭re.search(r'\bDynasty', 'Dynasty Dynasty')<_sre.SRE_Match object; span=(0, 7), match='Dynasty'>re.search(r'\bDynasty', 'Dynasty.Dynasty')<_sre.SRE_Match object; span=(0, 7), match='Dynasty'>print(re.search(r'\bDynasty', 'DynastyDynasty'))<_sre.SRE_Match object; span=(0, 7), match='Dynasty'># 單詞結(jié)尾re.search(r'Dynasty\b', 'Dynasty Dynasty')<_sre.SRE_Match object; span=(0, 7), match='Dynasty'>re.search(r'Dynasty\b', 'Dynasty.Dynasty')<_sre.SRE_Match object; span=(0, 7), match='Dynasty'>print(re.search(r'Dynasty\b', 'DynastyDynasty'))<_sre.SRE_Match object; span=(7, 14), match='Dynasty'># 單詞居中re.search(r'\bDynasty\b', 'Dynasty Dynasty ba')<_sre.SRE_Match object; span=(0, 7), match='Dynasty'>re.search(r'\bDynasty\b', 'Dynasty(Dynasty)ba')<_sre.SRE_Match object; span=(0, 7), match='Dynasty'>print(re.search(r'\bDynasty\b', 'DynastyDynastyba'))None

\B 不能在單詞的開頭或結(jié)尾。

print(re.search(r'\BDynasty\B', 'Dynasty'))Noneprint(re.search(r'\BDynasty\B', '.Dynasty.'))Nonere.search(r'\BDynasty\B', 'DynastyDynastyba')<_sre.SRE_Match object; span=(7, 14), match='Dynasty'>

類別4:量詞

該部分必須出現(xiàn)多少次才能使匹配成功。

* 匹配前面的子表達(dá)式零次或多次

re.search('Dynasty-*Dynasty', 'DynastyDynasty') <_sre.SRE_Match object; span=(0, 14), match='DynastyDynasty'>re.search('Dynasty-*Dynasty', 'Dynasty-Dynasty') <_sre.SRE_Match object; span=(0, 15), match='Dynasty-Dynasty'>re.search('Dynasty-*Dynasty', 'Dynasty--Dynasty') <_sre.SRE_Match object; span=(0, 16), match='Dynasty--Dynasty'>

匹配2個(gè)字符中全部的內(nèi)容。

re.search('Dynasty.*Dynasty', '# Dynasty jklasajk#*(@ Dynasty #')<_sre.SRE_Match object; span=(2, 30), match='Dynasty jklasajk#*(@ Dynasty'>

+ 匹配前面的子表達(dá)式一次或多次

print(re.search('Dynasty-+Dynasty', 'DynastyDynasty')) Nonere.search('Dynasty-+Dynasty', 'Dynasty-Dynasty') <_sre.SRE_Match object; span=(0, 15), match='Dynasty-Dynasty'>re.search('Dynasty-+Dynasty', 'Dynasty--Dynasty') <_sre.SRE_Match object; span=(0, 16), match='Dynasty--Dynasty'>

? 匹配前面的子表達(dá)式零次或一次

re.search('Dynasty-?Dynasty', 'DynastyDynasty')                    <_sre.SRE_Match object; span=(0, 14), match='DynastyDynasty'>re.search('Dynasty-?Dynasty', 'Dynasty-Dynasty')                   <_sre.SRE_Match object; span=(0, 15), match='Dynasty-Dynasty'>print(re.search('Dynasty-?Dynasty', 'Dynasty--Dynasty'))           None

.*?、+?、?? 最小長度匹配

+ 和 +? 代替了 * 和 *?,加問號(hào)則表示為最小長度匹配的懶惰模式。

# .*全匹配貪婪模式re.search('<.*>', '%<Dynasty> <Dynasty> <zs>%')<_sre.SRE_Match object; span=(1, 25), match='<Dynasty> <Dynasty> <sz>'># *? 前一個(gè)字符0次或無限次擴(kuò)展,最小匹配re.search('<.*?>', '%<Dynasty> <Dynasty> <sz>%')<_sre.SRE_Match object; span=(1, 10), match='<Dynasty>'># .+ 前一個(gè)字符1次或無限次擴(kuò)展,最小匹配re.search('<.+>', '%<Dynasty> <Dynasty> <zs>%')<_sre.SRE_Match object; span=(1, 25), match='<Dynasty> <Dynasty> <zs>'># .+? 前一個(gè)字符1次或無限次擴(kuò)展,最小匹配re.search('<.+?>', '%<Dynasty> <Dynasty> <zs>%')<_sre.SRE_Match object; span=(1, 10), match='<Dynasty>'># ? 匹配懶惰模式re.search('ba?', 'baaaa')<_sre.SRE_Match object; span=(0, 2), match='ba'># ?? 前一個(gè)字符0次或1次擴(kuò)展,最小匹配re.search('ba??', 'baaaa')<_sre.SRE_Match object; span=(0, 1), match='b'>

{m} 完全匹配m次前面元字符的正則表達(dá)式。

print(re.search('x-{3}x', 'x--x'))                Nonere.search('x-{3}x', 'x---x')                     <_sre.SRE_Match object; span=(0, 5), match='x---x'>print(re.search('x-{3}x', 'x----x'))             None

{m,n} 匹配前面正則表達(dá)式的任意數(shù)量的重復(fù)從m到n次。

for i in range(1, 6): s = f'x{'-' * i}x' print(f'{i} {s:10}', re.search('x-{2,4}x', s))1 x-x None2 x--x <_sre.SRE_Match object; span=(0, 4), match='x--x'>3 x---x <_sre.SRE_Match object; span=(0, 5), match='x---x'>4 x----x <_sre.SRE_Match object; span=(0, 6), match='x----x'>5 x-----x None

正則表達(dá)式

匹配說明

相同語法

< regex > {,n}

任何小于或等于的重復(fù)次數(shù)n

< regex > {0,n}

< regex > {m,}

任何大于或等于的重復(fù)次數(shù)m

----

< regex > {,}

任意次數(shù)的重復(fù)

< regex > {0,} , < regex > *

re.search('x{}y', 'x{}y')<_sre.SRE_Match object; span=(0, 4), match='x{}y'>re.search('x{Dynasty}y', 'x{Dynasty}y')<_sre.SRE_Match object; span=(0, 11), match='x{Dynasty}y'>re.search('x{a:b}y', 'x{a:b}y')<_sre.SRE_Match object; span=(0, 7), match='x{a:b}y'>re.search('x{1,3,5}y', 'x{1,3,5}y')<_sre.SRE_Match object; span=(0, 9), match='x{1,3,5}y'>re.search('x{Dynasty,Dynasty}y', 'x{Dynasty,Dynasty}y')<_sre.SRE_Match object; span=(0, 19), match='x{Dynasty,Dynasty}y'>

{m,n}? 只匹配一次。

非貪婪(懶惰)版本 {m,n}。

re.search('a{3,5}', 'aaaaaaaa')<_sre.SRE_Match object; span=(0, 5), match='aaaaa'>re.search('a{3,5}?', 'aaaaaaaa')<_sre.SRE_Match object; span=(0, 3), match='aaa'>

類別5:分組構(gòu)造和反向引用

分組構(gòu)造將 Python 中的正則表達(dá)式分解為子表達(dá)式或組。

(<regex>),定義子表達(dá)式或組。 括號(hào)中的正則表達(dá)式僅匹配括號(hào)的內(nèi)容。

re.search('(Dynasty)', 'Dynasty Dynasty ba')<_sre.SRE_Match object; span=(0, 7), match='Dynasty'>re.search('Dynasty', 'Dynasty Dynasty ba')<_sre.SRE_Match object; span=(0, 7), match='Dynasty'>

將組視為一個(gè)單元

組后面的量詞元字符對組中指定的整個(gè)子表達(dá)式作為一個(gè)單元進(jìn)行操作。

re.search('Dynasty+', 'Dynasty Dynasty zs')<_sre.SRE_Match object; span=(0, 7), match='Dynasty'>re.search('(Dynasty)+', 'Dynasty Dynasty zs')<_sre.SRE_Match object; span=(0, 7), match='Dynasty'>re.search('(Dynasty)+', 'Dynasty DynastyDynasty zs')<_sre.SRE_Match object; span=(0, 7), match='Dynasty'>

正則表達(dá)式

解釋

匹配說明

例子

Dynasty+

元字符+僅適用于字符'r'。

'ba'隨后出現(xiàn)一次或多次'r'

Dynasty、Dynastyr、Dynastyrr等

(Dynasty)+

元字符+適用于整個(gè)字符串'Dynasty'。

出現(xiàn)一次或多次'Dynasty'

Dynasty、DynastyDynasty、DynastyDynastyDynasty

捕獲組,m.groups()

返回一個(gè)元組,其中包含從正則表達(dá)式匹配中捕獲的所有組。

m = re.search('(\w+),(\w+),(\w+)', 'Dynasty,qw,ba')m<_sre.SRE_Match object; span=(0, 13), match='Dynasty,qw,ba'>m.groups()('Dynasty', 'qw', 'ba')

捕獲組,m.group(<n>)

返回包含<n>捕獲的匹配項(xiàng)的字符串。

m = re.search('(\w+),(\w+),(\w+)', 'Dynasty,qw,ba')m.groups()('Dynasty', 'qw', 'ba')m.group(0)'Dynasty,qw,ba'm.group(1)'Dynasty'm.group(2)'qw'm.group(3)'ba'

捕獲組,m.group(<n1>, <n2>, ...)

返回一個(gè)包含指定捕獲匹配序號(hào)的元組。

m = re.search('(\w+),(\w+),(\w+)', 'Dynasty,qw,ba')m.groups()('Dynasty', 'qw', 'ba')m.group(2, 3)('qw', 'ba')m.group(3, 2, 1)('ba', 'qw', 'Dynasty')

類別6:反向引用

\<num> 匹配連續(xù)相同字符

regex = r'(\w+),\1'm = re.search(regex, 'Dynasty,Dynasty')m<_sre.SRE_Match object; span=(0, 15), match='Dynasty,Dynasty'>m.group(1)'Dynasty'

類別7:其他分組結(jié)構(gòu)

(?P<name><regex>) 創(chuàng)建捕獲組并命名。

m = re.search('(?P<w1>\w+),(?P<w2>\w+),(?P<w3>\w+)', 'Dynasty,qw,ba')m.groups()('Dynasty', 'qw', 'ba')m.group('w1')'Dynasty'm.group('w3')'ba'm.group('w1', 'w2', 'w3')('Dynasty', 'qw', 'ba')m.group(1, 2, 3)('Dynasty', 'qw', 'ba')

(?P=<name>) 匹配先前捕獲名的內(nèi)容。

m = re.search(r'(\w+),\1', 'Dynasty,Dynasty')m<_sre.SRE_Match object; span=(0, 15), match='Dynasty,Dynasty'>m.group(1)'Dynasty'm = re.search(r'(?P<word>\w+),(?P=word)', 'Dynasty,Dynasty')m<_sre.SRE_Match object; span=(0, 15), match='Dynasty,Dynasty'>m.group('word')'Dynasty'

(?:<regex>) 創(chuàng)建一個(gè)非捕獲組。

m = re.search('(\w+),(?:\w+),(\w+)', 'Dynasty,qw,ba')m.groups()('Dynasty', 'ba')m.group(1)'Dynasty'm.group(2)'ba'

類別8:Lookahead 和 Lookbehind 斷言

根據(jù)解析器在搜索字符串中當(dāng)前位置的后面(左側(cè))或前面(右側(cè))來確定 Python 中正則表達(dá)式匹配的成功或失敗。

(?=<lookahead_regex>) 積極前瞻斷言。

斷言正則表達(dá)式解析器當(dāng)前位置之后的內(nèi)容必須匹配。

# 前瞻斷言(?=[a-z])指定后面的'Dynasty'必須是小寫字母字符。re.search('Dynasty(?=[a-z])', 'Dynastydynasty')<_sre.SRE_Match object; span=(0, 7), match='Dynasty'># 前瞻失敗的例子,Dynasty的下一個(gè)字符是'1'print(re.search('Dynasty(?=[a-z])', 'Dynasty123'))None# 前瞻的獨(dú)特之處<lookahead_regex>在于不消耗搜索字符串中匹配的部分,并且它不是返回的匹配對象的一部分。re.search('Dynasty(?=[a-z])', 'Dynastydynasty')<_sre.SRE_Match object; span=(0, 7), match='Dynasty'># 舉例對比觀察,?=斷言的區(qū)別m = re.search('Dynasty(?=[a-z])(?P<ch>.)', 'Dynastydynasty')m.group('ch')'d'm = re.search('Dynasty([a-z])(?P<ch>.)', 'Dynastydynasty')m.group('ch')'y'

(?!<lookahead_regex>) 否定的前瞻斷言。

# 例子和之前的前瞻積極斷言相反re.search('Dynasty(?=[a-z])', 'DynastyDynasty')<_sre.SRE_Match object; span=(0, 3), match='Dynasty'>print(re.search('Dynasty(?![a-z])', 'DynastyDynasty'))Noneprint(re.search('Dynasty(?=[a-z])', 'Dynasty123'))Nonere.search('Dynasty(?![a-z])', 'Dynasty123')<_sre.SRE_Match object; span=(0, 3), match='Dynasty'>

(?<=<lookbehind_regex>) 積極的后向斷言。

斷言正則表達(dá)式解析器當(dāng)前位置之前的內(nèi)容匹配。

# 斷言指定'Dynasty'必須先于'Dynasty're.search('(?<=Dynasty)Dynasty', 'DynastyDynasty')<_sre.SRE_Match object; span=(7, 14), match='Dynasty'>print(re.search('(?<=qux)Dynasty', 'DynastyDynasty'))None

(?<!--<lookbehind_regex-->) 否定的向后斷言。

# 例子和之前的向后積極斷言相反print(re.search('(?<!Dynasty)Dynasty', 'DynastyDynasty'))<_sre.SRE_Match object; span=(0, 7), match='Dynasty'>re.search('(?<!qw)Dynasty', 'DynastyDynasty')<_sre.SRE_Match object; span=(0, 7), match='Dynasty'>

類別9:雜項(xiàng)元字符

(?#...) 指定注釋。

正則表達(dá)式解析器忽略(?#...)序列中包含的任何內(nèi)容

re.search('Dynasty(?#xxxx xxxx) *ba', 'Dynasty Dynasty ba qw')<_sre.SRE_Match object; span=(8, 18), match='Dynasty ba'>

豎條或管道 ( | ) 指定要匹配的一組備選方案。

形式的表達(dá)式最多匹配一個(gè)指定的表達(dá)式:<regex1>|<regex2>|...|<regexn><regexi>

re.search('Dynasty|Dynasty|ba', 'Dynasty')<_sre.SRE_Match object; span=(0, 7), match='Dynasty'>re.search('Dynasty|Dynasty|ba', 'baz')<_sre.SRE_Match object; span=(0, 2), match='ba'>print(re.search('Dynasty|Dynasty|ba', 'qw'))None

結(jié)合交替、分組和任何其他元字符來實(shí)現(xiàn)需要的任何復(fù)雜程度。

# (Dynasty|Dynasty|ba)+表示一個(gè)或多個(gè)字符串re.search('(Dynasty|Dynasty|ba)+', 'DynastyDynastyDynasty')<_sre.SRE_Match object; span=(0, 21), match='DynastyDynastyDynasty'>re.search('(Dynasty|Dynasty|ba)+', 'bazbazbazbaz')<_sre.SRE_Match object; span=(0, 2), match='ba'>re.search('(Dynasty|Dynasty|ba)+', 'DynastybazDynasty')<_sre.SRE_Match object; span=(0, 9), match='Dynastyba'>

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    千仞雪下面好爽好紧好湿全文| 成年人免费看国产视频| 亚洲一区二区欧美激情| 亚洲精品欧美精品日韩精品| 欧美国产在线观看精品| 亚洲第一区欧美日韩在线| 日韩人妻av中文字幕| 亚洲国产成人久久一区二区三区| 中文人妻精品一区二区三区四区| 国产精品午夜性色视频| 国产一区欧美一区二区| 亚洲视频一区二区久久久| 日本不卡在线视频你懂的 | 欧美不卡一区二区在线视频| 好吊视频一区二区在线| 亚洲欧美日韩国产综合在线| 国产肥妇一区二区熟女精品| 国产亚洲中文日韩欧美综合网| 国产精品丝袜美腿一区二区| 在线观看欧美视频一区| 99久久免费看国产精品| 国产白丝粉嫩av在线免费观看| 日韩中文字幕在线不卡一区| 91超频在线视频中文字幕 | 五月婷婷六月丁香狠狠| 欧美日韩国产一级91| 久久99精品日韩人妻| 1024你懂的在线视频| 视频在线播放你懂的一区| 日韩精品在线观看一区| 成人区人妻精品一区二区三区| 激情五月综五月综合网| 91精品视频全国免费| 丰满人妻一二三区av| 亚洲午夜av一区二区| 精品日韩中文字幕视频在线| 韩日黄片在线免费观看| 亚洲免费视频中文字幕在线观看| 伊人久久青草地婷婷综合| 亚洲国产香蕉视频在线观看| 国产精品一区二区传媒蜜臀|