亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

超詳細(xì)講解python正則表達(dá)式

 更新時(shí)間:2021年08月31日 15:45:43   作者:Silent丿丶黑羽  
這篇文章主要介紹了python正則表達(dá)式,利用正則表達(dá)式實(shí)現(xiàn)文本的查找和替換功能會(huì)相對(duì)于比較簡(jiǎn)單,效率也會(huì)更高。感興趣的小伙伴一起來(lái)學(xué)習(xí)學(xué)習(xí)吧

正則表達(dá)式

  正則表達(dá)式(Regular Expression,在代碼中常簡(jiǎn)寫為regex、 regexpREre)是預(yù)先定義好的一個(gè)“規(guī)則字符率”,通過(guò)這個(gè)“規(guī)則字符串”可以匹配、查找和替換那些符合“規(guī)則”的文本。
  雖然文本的查找和替換功能可通過(guò)字符串提供的方法實(shí)現(xiàn),但是實(shí)現(xiàn)起來(lái)極為困難,而且運(yùn)算效率也很低。而使用正則表達(dá)式實(shí)現(xiàn)這些功能會(huì)比較簡(jiǎn)單,而且效率很高,唯一的困難之處在于編寫合適的正則表達(dá)式。
  Python 中正則表達(dá)式應(yīng)用非常廣泛,如數(shù)據(jù)挖掘、數(shù)據(jù)分析、網(wǎng)絡(luò)爬蟲、輸入有效性驗(yàn)證等,Python 也提供了利用正則表達(dá)式實(shí)現(xiàn)文本的匹配、查找和替換等操作的 re 模塊。

1.1 正則表達(dá)式字符串

正則表達(dá)式是一種字符串,正則表達(dá)式字符串是由普通字符和元字符組成的。
1)普通字符

普通字符是按照字符字面意義表示的字符。

2)元字符

元字符是預(yù)先定義好的一些特定字符,比如\w\.都屬于元字符。

1.1.1 元字符

元字符(Metacharacters)是用來(lái)描述其他字符的特殊字符,它由基本元字符和普通字符構(gòu)成?;驹址菢?gòu)成元字符的組成要素。基本元字符主要有14個(gè),具體如下圖所示。

字符 說(shuō)明
\ 轉(zhuǎn)義符,表示轉(zhuǎn)義
. 表示任意一個(gè)字符
+ 表示重復(fù)1次或多次
* 表示重復(fù)0次或多次
? 表示重復(fù)0次或1次
| 選擇符號(hào),表示“或關(guān)系”,例如:A | B 表示匹配A或B
{} 定義量詞
[] 定義字符類
() 定義分組
^ 可以表示取反,或匹配一行的開始
$ 匹配一行的結(jié)束

上面表格中\(zhòng)w+ 是元字符,它由兩個(gè)基本元字符(\+)和一個(gè)普通字符 w構(gòu)成。另外,還有.元字符,它由兩個(gè)基本元字符\,構(gòu)成。
學(xué)習(xí)正則表達(dá)式某種意義上講就是在學(xué)習(xí)元字符的使用,元字符是正則表達(dá)式的重點(diǎn)也是難點(diǎn)。下面會(huì)分門別類地介紹元字符的具體使用。

1.1.2 字符轉(zhuǎn)義

在正則表達(dá)式中有時(shí)也需要字符轉(zhuǎn)義,比如 w字符不表示英文字母 w,而是表示任何語(yǔ)言的單詞字符(如英文字母、亞洲文字等)、數(shù)字和下畫線等內(nèi)容時(shí),需要在w 字母前加上反斜杠\。反斜杠\也是基本元字符,與 Python 語(yǔ)言中的字符轉(zhuǎn)義是類似的。不僅可以對(duì)普通字符進(jìn)行轉(zhuǎn)義,還可以對(duì)基本元字符進(jìn)行轉(zhuǎn)義。如上面的表格,其中點(diǎn).字符是希望按照點(diǎn).的字面意義使用,作為.com域名的一部分,而不是作為.基本元字符使用,所以需要加反斜杠\進(jìn)行轉(zhuǎn)義,即\.才是表示點(diǎn).的字面意義。

1.1.3 開始與結(jié)束字符

本節(jié)通過(guò)一個(gè)示例介紹在 Python中如何使用正則表達(dá)式。
在1.1.1 節(jié)介紹基本元字符時(shí)介紹了^$,它們可以用于匹配一行字符串的開始和結(jié)束。當(dāng)以^開始時(shí),要求一行字符串的開始位置匹配:當(dāng)以$結(jié)束時(shí),要求一行字符串的結(jié)位置匹配。所以正則表達(dá)式\w+@jiakecong.com^w+@jiakecong.com$是不同的。
示例代碼如下:

import re


p1 = r'\w+@jiakecong\.com'
p2 = r'^\w+@jiakecong\.com$'
text = "Tony 's email is tony_guan111@jiakecong.com"
m = re.search(p1, text)
print(m)

m = re.search(p2, text)
print(m)

email = "tony_guan111@jiakecong.com"
m = re.search(p2, email)
print(m)

輸出結(jié)果如下:

<re.Match object; span=(17, 43), match='tony_guan111@jiakecong.com'>
None
<re.Match object; span=(0, 26), match='tony_guan111@jiakecong.com'>

1.2 字符類

在正則表達(dá)式中可以使用字符類,一個(gè)字符類定義一組字符,其中的任一一個(gè)字符出現(xiàn)在輸入字符串中即匹配成功。注意每次匹配只能匹配字符類中的一個(gè)字符。

1.2.1 定義字符類

定義一個(gè)普通的字符類需要使用[]元字符類。例如想在輸入字符串中匹配Javajava,可以使用正則表達(dá)式[Jj]ava,示例代碼如下:

p = r'[Jj]ava'
m = re.search(p, 'I like Java and Python')
print(m)

m = re.search(p, 'I like JAVA and Python')
print(m)

m = re.search(p, 'I like java and python')
print(m)

輸出結(jié)果如下:

<re.Match object; span=(7, 11), match='Java'>
None
<re.Match object; span=(7, 11), match='java'>

上述代碼中除了JAVA不匹配正則表達(dá)式[Jj]ava,其他都匹配

1.2.2 字符串取反

在正則表達(dá)式中指定不想出現(xiàn)的字符,可以在字符類前加^符號(hào)。示例代碼如下:

import re

p = r'[^0123456789]'

m = re.search(p, '1000')
print(m)

m = re.search(p, 'python')
print(m)

上述代碼定義的正則表達(dá)式[^0123456789],它表示輸入字符串中出現(xiàn)非0-9數(shù)字即匹配,即出現(xiàn)在[0123456789]以外的任意一字符即匹配

1.2.3 區(qū)間

上面示例中的[^0123456789]正則表達(dá)式,事實(shí)上有些麻煩,這種連續(xù)的數(shù)字可以使用區(qū)間表示。區(qū)間是用連字符-表示的,例如[0123456789]采用區(qū)間表示為[0-9],[^0123456789]采用區(qū)間表示為[^0-9]。區(qū)間還可以表示連續(xù)的英文字母字符類,例如[a-z]表示所有小寫字母字符類,[A-Z]表示所有大寫字母字符類。
另外,也可以表示多個(gè)不同區(qū)間,[A-Za-z0-9]表示所有字母和數(shù)字字符類,[0-25-7]表示0、1、2、5、6、7幾個(gè)字符組成的字符類。
示例代碼如下:

import re

m = re.search('[A-Za-z0-9]', 'A10.3')
print(m)

m = re.search(r'[0-25-7]', 'A3489C')
print(m)

輸出結(jié)果如下:

<re.Match object; span=(0, 1), match='A'>
None

1.2.4 預(yù)定義字符類

有些字符類很常用,例如[0-9]等。為了書寫方便,正則表達(dá)式提供了預(yù)定義的字符類,例如預(yù)定義字符類\d等價(jià)于[0-9]字符類。預(yù)定義字符類如下圖所示

字符 說(shuō)明
. 匹配任意一個(gè)字符
\ 匹配反斜杠\字符
\n 匹配換行
\r 匹配回車
\f 匹配一個(gè)換頁(yè)符
\t 匹配一個(gè)水平制表符
\v 匹配一個(gè)垂直制表符
\s 匹配一個(gè)空格符,等價(jià)于[\t\n\r\f\v]
\S 匹配一個(gè)非空格符,等價(jià)于[^\s]
\d 匹配一個(gè)數(shù)字字符,等價(jià)于[0-9]
\D 匹配一個(gè)非數(shù)字字符,等價(jià)[^0-9]
\w 匹配任意語(yǔ)言的單詞字符、數(shù)字和下劃線'_'等字符,如果正則表達(dá)式標(biāo)志設(shè)置為ASCII,則只匹配[a-zA-Z0-9]
\W 等價(jià)于[^\w]

示例代碼如下:

import re

p = r'\D'
m = re.search(p, 'assss')
print(m)

m = re.search(p, '1000')
print(m)

text = '你們好hello'
m = re.search(r'\w', text)
print(m)

輸出結(jié)果如下:

<re.Match object; span=(0, 1), match='a'>
None
<re.Match object; span=(0, 1), match='你'>

上述代碼正則表達(dá)式\D就等于[^0123456789]。另一個(gè)正則表達(dá)式\w表示任意字符,會(huì)在text字符串中查找匹配字符,找到的結(jié)果是字符。

1.3 量詞

之前學(xué)習(xí)的正則表達(dá)式元字符只能匹配顯示一次字符或字符串,如果想匹配顯示多次字符或字符串可以使用量詞

1.3.1 量詞的使用

量詞表示字符或字符串重復(fù)的次數(shù),正則表達(dá)式中的量詞如下表:

字符 說(shuō)明
? 出現(xiàn)0或1次
* 出現(xiàn)0或多次
+ 出現(xiàn)1或多次
{n} 出現(xiàn)n次
{n,m} 至少出現(xiàn)n次,但不超過(guò)m次
{n,} 至少出現(xiàn)n次

量詞的使用示例代碼如下:

import re

m = re.search(r'\d?', '87654321')
print(m)

m = re.search(r'\d?', 'ABC')
print(m)

m = re.search(r'\d*', '87654321')
print(m)

m = re.search(r'\d*', 'ABC')
print(m)

m = re.search(r'\d+', '87654321')
print(m)

m = re.search(r'\d+', 'ABC')
print(m)

m = re.search(r'\d{8}', '87654321')
print(m)

m = re.search(r'\d{8}', 'ABC')
print(m)

m = re.search(r'\d{7,8}', '87654321')
print(m)

m = re.search(r'\d{9, }', '87654321')
print(m)

輸出結(jié)果如下:

<re.Match object; span=(0, 1), match='8'>
<re.Match object; span=(0, 0), match=''>
<re.Match object; span=(0, 8), match='87654321'>
<re.Match object; span=(0, 0), match=''>
<re.Match object; span=(0, 8), match='87654321'>
None
<re.Match object; span=(0, 8), match='87654321'>
None
<re.Match object; span=(0, 8), match='87654321'>
None

1.3.2 貪婪量詞和懶惰量詞

量詞還可以細(xì)分為貪婪量詞和懶惰量詞,貪婪量詞會(huì)盡可能多地匹配字符,懶惰量詞會(huì)盡可能少地匹配字符。大多數(shù)計(jì)算機(jī)語(yǔ)言的正則表達(dá)式量詞默認(rèn)是貪婪的,要想使用懶惰量詞在量詞后面加?即可
示例代碼如下:

import re

m = re.search(r'\d{5,8}', '87654321')
print(m)

m = re.search(r'\d{5,8}?', '87654321')
print(m)

輸出結(jié)果如下:

<re.Match object; span=(0, 8), match='87654321'>
<re.Match object; span=(0, 5), match='87654'>

上述代碼使用了貪婪量詞{5,8},輸入字符串87654321是長(zhǎng)度8位的數(shù)字字符串,盡可能多地匹配字符結(jié)果是87654321。代碼使用懶惰量詞{5,8}?,輸入字符串87654321是長(zhǎng)度8位的數(shù)字字符串,盡可能少的匹配字符結(jié)果是87654。

1.4 分組

在此之前學(xué)習(xí)的量詞只能重復(fù)顯示一個(gè)字符,如果想讓一個(gè)字符串作為整體使用量詞,可將整個(gè)字符串放到一對(duì)小括號(hào)中,這就是分組(也稱子表達(dá)式)

1.4.1 分組的使用

對(duì)正則表達(dá)式進(jìn)行分組不經(jīng)可以對(duì)一個(gè)字符串整體使用量詞,還可以在正則表達(dá)式中引用已經(jīng)存在的分組。示例代碼如下:

import re

p = r'(121){2}'
m = re.search(p, '121121abcabc')
print(m)
print(m.group())  # 返回匹配的字符串
print(m.group(1))  # 返回第一組內(nèi)容

p = r'(\d{3,4})-(\d{7,8})'
m = re.search(p, '010-87654321')
print(m)
print(m.group())  # 返回匹配字符串
print(m.groups())  # 獲得所有組內(nèi)容

輸出結(jié)果如下:

<re.Match object; span=(0, 6), match='121121'>
121121
121
<re.Match object; span=(0, 12), match='010-87654321'>
010-87654321
('010', '87654321')

上述代碼定義的正則表達(dá)式(121)是將121字符串分為一組,(121){2}表示對(duì)121重復(fù)兩次,即121121。代碼調(diào)用match對(duì)象的group()方法返回匹配的字符串,group()方法語(yǔ)法如下:

match.group([group1, ...])

其中參數(shù)group1是組編號(hào),在正則表達(dá)式中組編號(hào)是從1開始的,所以代碼正則表達(dá)式m.group(1)表示返回第一組內(nèi)容
代碼 r'(\d{3,4})-(\d{7,8})'正則表達(dá)式可以用來(lái)驗(yàn)證固定電話號(hào)碼,在-之前是3-4位的區(qū)號(hào),-之后是7-8位的電話號(hào)碼。在該正則表達(dá)式中有兩個(gè)分組。代碼m.groups()方法是返回所有分組,返回值是一個(gè)元組

1.4.2 分組命名

在Python程序中訪問(wèn)分組時(shí),除了可以通過(guò)組編號(hào)進(jìn)行訪問(wèn),還可以通過(guò)組名進(jìn)行訪問(wèn),前提是要在正則表達(dá)式中為組命名。組命名通過(guò)在組開頭添加?P<分組名>實(shí)現(xiàn)。
示例代碼如下:

import re

p = r'(?P<area_code>\d{3,4})-(?P<phone_code>\d{7,8})'
m = re.search(p, '010-87654321')
print(m)
print(m.group())  # 返回匹配字符串
print(m.groups())  # 獲得所有組內(nèi)容

# 通過(guò)組編號(hào)返回組內(nèi)容
print(m.group(1))
print(m.group(2))

# 通過(guò)組名返回組內(nèi)容
print(m.group('area_code'))
print(m.group('phone_code'))

輸出結(jié)果如下:

<re.Match object; span=(0, 12), match='010-87654321'>
010-87654321
('010', '87654321')
010
87654321
010
87654321

上述代碼其實(shí)和1.4.1的代碼是一樣的,只是給正則表達(dá)式命名了,以后就可以通過(guò)組編號(hào)或組名字來(lái)訪問(wèn)

1.4.3 反向引用分組

除了可以在程序diamante中訪問(wèn)正則表達(dá)式匹配之后的分組內(nèi)容,還可以再正則表達(dá)式內(nèi)部引用之前的分組。
下面通過(guò)示例熟悉以下反向引用分組。假設(shè)由于工作需要想解析一段XML代碼,需要找到某一個(gè)開始標(biāo)簽和結(jié)束標(biāo)簽,示例代碼如下:

import re

p = r'<([\w]+)>.*</([\w]+)>'
m = re.search(p, '<a>abc</a>')
print(m)

p = r'<([\w]+)>.*</([\w]+)>'
m = re.search(p, '<a>abc</b>')
print(m)

輸出結(jié)果如下:

<re.Match object; span=(0, 10), match='<a>abc</a>'>
<re.Match object; span=(0, 10), match='<a>abc</b>'>

上述代碼的正則表達(dá)式分成了兩組,兩組內(nèi)容完全一樣。但是測(cè)試結(jié)果發(fā)現(xiàn)他們都是匹配的,但是<a>abc</b>明顯不是有效的XML代碼,因?yàn)殚_始標(biāo)簽和結(jié)束標(biāo)簽應(yīng)該是一致的??梢?jiàn)代碼r'<([\w]+)>.*</([\w]+)>'并不能保證開始標(biāo)簽和結(jié)束標(biāo)簽是一致的。為了解決此問(wèn)題,可以引用反向引用,即讓第二組反向引用第一組。在正則表達(dá)式中反向引用語(yǔ)法是\組編號(hào),組編號(hào)是從1開始的。示例代碼如下:

import re

p = r'<([\w]+)>.*</\1>'  # 使用了反向引用  ①
m = re.search(p, '<a>abc</a>')
print(m)  # 匹配

m = re.search(p, '<a>abc</b>')
print(m)  # 不匹配

輸出結(jié)果如下:

<re.Match object; span=(0, 10), match='<a>abc</a>'>
None

上述代碼第①行時(shí)定義正則表達(dá)式,其中\1是反向引用第一個(gè)組,從運(yùn)行結(jié)果可見(jiàn)字符串<a>abc</a>是匹配的,而<a>abc</b>字符串不匹配

1.4.4 非捕獲分組

前面介紹的分組稱為捕獲分組。捕獲分組的匹配子表達(dá)式結(jié)果被暫時(shí)保存到內(nèi)存中,以備表達(dá)式或其他程序引用,這個(gè)過(guò)程稱為"捕獲",捕獲結(jié)果可以通過(guò)組編號(hào)或組名進(jìn)行引用。但是有時(shí)并不想引用子表達(dá)式的匹配結(jié)果,不想捕獲匹配結(jié)果,只是將小括號(hào)作為一個(gè)整體進(jìn)行匹配,此時(shí)可以使用非捕獲分組,在組開頭使用?,可以實(shí)現(xiàn)非捕獲分組
示例代碼如下:

import re

s = 'img1.jpg,img2.jpg,img3.bmp'

# 捕獲分組
p = r'\w+(\.jpg)'
mlist = re.findall(p, s)       ①
print(mlist)

# 非捕獲分組
p = r'\w+(?:\.jpg)'
mlist = re.findall(p, s)       ②
print(mlist)

輸出結(jié)果如下:

['.jpg', '.jpg']
['img1.jpg', 'img2.jpg']

上述代碼實(shí)現(xiàn)了從字符串中查找.jpg結(jié)尾的文本,其中代碼第①行和第②行的正則表達(dá)式區(qū)別在于前者是捕獲分組,后者是非捕獲分組。捕獲分組將括號(hào)中的內(nèi)容作為子表達(dá)式進(jìn)行捕獲匹配,將匹配的子表達(dá)式(即組的內(nèi)容)返回,結(jié)果是['.jpg','.jpg']。而非捕獲分組將括號(hào)中的內(nèi)容作為普通的正則表達(dá)式字符串進(jìn)行整體匹配,即找到.jpg結(jié)尾的文本,所以最后結(jié)果是['img1.jpg', 'img2.jpg']。

1.5 re模塊

rePython內(nèi)置的正則表達(dá)式模塊,前面雖然使用過(guò)re模塊一些函數(shù),但還有很多重要函數(shù)沒(méi)有詳細(xì)介紹,這一節(jié)將詳細(xì)介紹這些函數(shù)

1.5.1 search()和match()函數(shù)

search()match()函數(shù)非常相似,它們的區(qū)別如下所示

search():在輸入字符串中查找,返回第一個(gè)匹配內(nèi)容,如果找到一個(gè)則match對(duì)象,如果沒(méi)有找到返回Nonematch():在輸入字符串開始處查找匹配內(nèi)容,如果找到一個(gè)則match對(duì)象,如果沒(méi)有找到返回None

示例代碼如下:

import re

p = r'\w+@jiakecong\.com'

text = "Tony 's email is tony_guan111@jiakecong.com"  ①
m = re.search(p, text)
print(m)

m = re.match(p, text)
print(m)

email = 'tony_guan111@jiakecong.com'        ②
m = re.search(p, email)
print(m)

m = re.match(p, email)
print(m)

# match對(duì)象幾個(gè)方法
print('match對(duì)象幾個(gè)方法:')                      ③
print(m.group())
print(m.start())
print(m.end())
print(m.span())

輸出結(jié)果如下:

<re.Match object; span=(17, 43), match='tony_guan111@jiakecong.com'>
None
<re.Match object; span=(0, 26), match='tony_guan111@jiakecong.com'>
<re.Match object; span=(0, 26), match='tony_guan111@jiakecong.com'>
match對(duì)象幾個(gè)方法:
tony_guan111@jiakecong.com
0
26
(0, 26)

上述代碼第①行輸入字符串開頭不是email,search()函數(shù)可以匹配成功,而match()函數(shù)卻匹配失敗。代碼第②行輸入字符串開頭就是email格式的郵箱,所以search()match()函數(shù)都可以匹配成功
searchmatch()函數(shù)如果匹配成功都返回match對(duì)象。match對(duì)象有一些常用方法,見(jiàn)代碼第③行。其中group()方法返回匹配的子字符串;start()方法返回子字符串的開始索引;end()方法返回子字符串的結(jié)束索引;span方法返回子字符串的跨度,它是一個(gè)二元素的元組。

1.5.2 findall()和finditer()函數(shù)

findall()finditer()函數(shù)非常相似,它們的區(qū)別如下所示

  • findall():在輸入字符串中查找所有匹配內(nèi)容,如果匹配成功,則返回match列表對(duì)象,如果匹配失敗則返回None
  • finditer():在輸入字符串中查找所有匹配內(nèi)容,如果匹配成功,則返回容納match的可迭代對(duì)象,通過(guò)迭代對(duì)象每次可以返回一個(gè)match對(duì)象,如果匹配失敗則返回None

示例代碼如下:

import re

p = r'[Jj]ava'
text = 'I like Java and java'

match_list = re.findall(p, text)       ①
print(match_list)

match_iter = re.finditer(p, text)     ②
for m in match_iter:                    ③
    print(m.group())

輸出結(jié)果如下:

['Java', 'java']
Java
java

上述代碼第①行的findall()函數(shù)返回match列表對(duì)象。代碼第②行的finditer()函數(shù)返回可迭代對(duì)象。代碼第③行通過(guò)for循環(huán)遍歷可迭代對(duì)象

1.5.3 字符串分割

字符串分割使用split函數(shù),該函數(shù)按照匹配的子字符串進(jìn)行字符串分割,返回字符串列表對(duì)象

re.split(pattern, string, maxsplit=0, flags=0)

其中參數(shù)pattern是正則表達(dá)式;參數(shù)string是要分割的字符串;參數(shù)maxsplit是最大分割次數(shù),maxsplit默認(rèn)值為零,表示分割次數(shù)沒(méi)有限制;參數(shù)flags是編譯標(biāo)志
示例代碼如下:

import re

p = r'\d+'
text = 'AB12CD34EF'

clist = re.split(p, text)   ①
print(clist)

clist = re.split(p, text, maxsplit=1)    ②
print(clist)

clist = re.split(p, text, maxsplit=2)    ③
print(clist)

輸出結(jié)果如下:

['AB', 'CD', 'EF']
['AB', 'CD34EF']
['AB', 'CD', 'EF']

上述代碼調(diào)用split()函數(shù)通過(guò)數(shù)字對(duì)AB12CD34EF字符串進(jìn)行分割,\d+正則表達(dá)式匹配一到多個(gè)數(shù)字。

  • 代碼第①行split()函數(shù)中參數(shù)maxsplitflags是默認(rèn)的,分割的次數(shù)沒(méi)有限制,分割結(jié)果是['AB', 'CD', 'EF']列表
  • 代碼第②行split()函數(shù)指定maxsplit為1,分割結(jié)果是['AB', 'CD34EF']列表,列表元素的個(gè)數(shù)是maxsplit+1。
  • 代碼第③行split()函數(shù)指定maxsplit為2,2是最大可能的分割次數(shù),因此maxsplit≥2maxsplit=0是一樣的。

1.5.4 字符串替換

字符串替換使用sub()函數(shù),該函數(shù)用于替換匹配的子字符串,返回值是替換之后的字符串。

re.sub(pattern, rep1, string, count=0, flags=0)

其中參數(shù)pattern是正則表達(dá)式;參數(shù)rep1是替換字符串;參數(shù)string是要提供的字符串;參數(shù)count是要替換的最大數(shù)量,默認(rèn)值為零,表示替換數(shù)量沒(méi)有限制;參數(shù)flags是編譯標(biāo)志
示例代碼如下:

import re

p = r'\d+'
text = 'AB12CD34EF'

replace_text = re.sub(p, ' ', text)      ①
print(replace_text)

replace_text = re.sub(p, ' ', text, count=1)     ②
print(replace_text)

replace_text = re.sub(p, ' ', text, count=2)     ③
print(replace_text)

輸出結(jié)果如下:

AB CD EF
AB CD34EF
AB CD EF

上述代碼調(diào)用sub()函數(shù)替換AB12CD34EF字符串中的數(shù)字。

  • 代碼第①行sub()函數(shù)中參數(shù)countflags都是默認(rèn)的,替換的最大數(shù)量沒(méi)有限制,替換結(jié)果是AB CD EF
  • 代碼第②行sub()函數(shù)指定count為1,替換結(jié)果是AB CD34EF
  • 代碼第③行sub()函數(shù)指定count為2,2是最大可能的替換次數(shù),因此count≥2count=0是一樣的。

到此這篇關(guān)于超詳細(xì)講解python正則表達(dá)式的文章就介紹到這了,更多相關(guān)python正則表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python中os.path.exits()的坑

    python中os.path.exits()的坑

    本文主要介紹了python中os.path.exits()的坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Python中try excpet BaseException(異常處理捕獲)的使用

    Python中try excpet BaseException(異常處理捕獲)的使用

    本文主要介紹了Python中try excpet BaseException(異常處理捕獲)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • python端口掃描系統(tǒng)實(shí)現(xiàn)方法

    python端口掃描系統(tǒng)實(shí)現(xiàn)方法

    這篇文章主要介紹了python端口掃描系統(tǒng)實(shí)現(xiàn)方法,可實(shí)現(xiàn)簡(jiǎn)單的外網(wǎng)IP掃描及寫入MySQL數(shù)據(jù)庫(kù)等功能,需要的朋友可以參考下
    2014-11-11
  • Python實(shí)現(xiàn)一個(gè)數(shù)組除以一個(gè)數(shù)的例子

    Python實(shí)現(xiàn)一個(gè)數(shù)組除以一個(gè)數(shù)的例子

    今天小編就為大家分享一篇Python實(shí)現(xiàn)一個(gè)數(shù)組除以一個(gè)數(shù)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • 一文帶你了解Python與svg之間的操作

    一文帶你了解Python與svg之間的操作

    svgwrite是一個(gè)?Python?庫(kù),用于生成簡(jiǎn)單的?SVG?圖片。它提供了一組類似于繪圖的?API,使用者可以在?SVG?畫布上畫線、矩形、圓等圖形。本文主要介紹了如何利用svgwrite進(jìn)行SVG圖片的操作,需要的可以參考一下
    2023-01-01
  • python實(shí)現(xiàn)將文本轉(zhuǎn)換成語(yǔ)音的方法

    python實(shí)現(xiàn)將文本轉(zhuǎn)換成語(yǔ)音的方法

    這篇文章主要介紹了python實(shí)現(xiàn)將文本轉(zhuǎn)換成語(yǔ)音的方法,涉及Python中pyTTS模塊的相關(guān)使用技巧,需要的朋友可以參考下
    2015-05-05
  • Python 函數(shù)基礎(chǔ)知識(shí)匯總

    Python 函數(shù)基礎(chǔ)知識(shí)匯總

    Python中的函數(shù),無(wú)論是命名函數(shù),還是匿名函數(shù),都是語(yǔ)句和表達(dá)式的集合。函數(shù)可以作為參數(shù)傳遞給其他函數(shù),這些以其他函數(shù)作為參數(shù)的函數(shù)通常稱為更高階函數(shù),這就構(gòu)成了函數(shù)式編程中一個(gè)非常重要的部分。
    2018-03-03
  • Window 64位下python3.6.2環(huán)境搭建圖文教程

    Window 64位下python3.6.2環(huán)境搭建圖文教程

    這篇文章主要為大家詳細(xì)介紹了Window 64位下python3.6.2環(huán)境搭建圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • python靜態(tài)方法實(shí)例

    python靜態(tài)方法實(shí)例

    這篇文章主要介紹了python靜態(tài)方法,實(shí)例分析了python靜態(tài)方法的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • python3 中的字符串(單引號(hào)、雙引號(hào)、三引號(hào))以及字符串與數(shù)字的運(yùn)算

    python3 中的字符串(單引號(hào)、雙引號(hào)、三引號(hào))以及字符串與數(shù)字的運(yùn)算

    這篇文章主要介紹了python3 中的字符串(單引號(hào)、雙引號(hào)、三引號(hào))以及字符串與數(shù)字的運(yùn)算,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07

最新評(píng)論