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

Python正則表達(dá)式re.compile()和re.findall()詳解

 更新時(shí)間:2022年07月07日 09:39:37   作者:扒啦啦能量  
re?模塊提供了不少有用的函數(shù),用以匹配字符串,下面這篇文章主要給大家介紹了關(guān)于Python正則表達(dá)式re.compile()和re.findall()的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

在使用爬蟲提取網(wǎng)頁(yè)中的部分信息時(shí),采用到了re.compile()與re.findall()兩種方法,目的:把網(wǎng)頁(yè)中的“某某城市土地規(guī)劃表”截取并打印出來(lái).

網(wǎng)頁(yè)中的代碼:

 <span class='tab-details'>某某城市土地規(guī)劃表</span>

提取的方法:

def parse_response(html):
    pattern = re.compile('class=\'tab-details\'>(.*?)</span>',re.S)
    items = re.findall(pattern,html)  
    print(items)
    
    return items

結(jié)果:

['某某城市土地規(guī)劃表']

這里主要講解pattern,re.compile()與re.findall()的定義及用法:

1.pattern :pattern 屬性規(guī)定用于驗(yàn)證輸入字段的正則表達(dá)式。

2.re.compile():compile() 方法用于在腳本執(zhí)行過(guò)程中編譯正則表達(dá)式,也可用于改變和重新編譯正則表達(dá)式。

舉例:在字符串中全局搜索 "man",并用 "person" 替換。然后通過(guò) compile() 方法,改變正則表達(dá)式,用 "person" 替換 "man" 或 "woman",:

<script type="text/javascript">
var str="Every man in the world! Every woman on earth!";
 
patt=/man/g;
str2=str.replace(patt,"person");
//用person取代man
document.write(str2+"<br />");
 
patt=/(wo)?man/g;
patt.compile(patt);
str2=str.replace(patt,"person");
//用person取代man或者woman
document.write(str2);
 
</script>

輸出:(可見第一行中的man都被person取代,出現(xiàn)了woperson,第二行的的man和woman也被person取代,只有person,沒(méi)有其他奇奇怪怪的字符串)

Every person in the world! Every woperson on earth!
Every person in the world! Every person on earth!

3.re.findall():額,這個(gè)最難搞,主要是為了講解(.*?)

re.findall()函數(shù)是返回某種形式(比如String)中所有與pattern匹配的全部字符串,返回形式為數(shù)組。

下面是findall()函數(shù)的兩種表示形式:(上面的代碼采取的便是第二種形式):

import re
kk = re.compile(r'\d+')
kk.findall('one1two2three3four4')
#[1,2,3,4]
 
#注意此處findall()的用法,可傳兩個(gè)參數(shù);
kk = re.compile(r'\d+')
re.findall(kk,"one123")
#[1,2,3]

下面的是常用的正則表達(dá)式:

import re
 
str = 'aabbabaabbaa'
 
# 一個(gè)"."就是匹配除 \n (換行符)以外的任意一個(gè)字符
print(re.findall(r'a.b',str))#['aab', 'aab']
 
# *前面的字符出現(xiàn)0次或以上
print(re.findall(r'a*b',str))#['aab', 'b', 'ab', 'aab', 'b']
 
# 貪婪,匹配從.*前面為開始到后面為結(jié)束的所有內(nèi)容
print(re.findall(r'a.*b',str))#['aabbabaabb']
 
# 非貪婪,遇到開始和結(jié)束就進(jìn)行截取,因此截取多次符合的結(jié)果,中間沒(méi)有字符也會(huì)被截取
print(re.findall(r'a.*?b',str))#['aab', 'ab', 'aab']
 
# 非貪婪,與上面一樣,只是與上面的相比多了一個(gè)括號(hào),只保留括號(hào)的內(nèi)容
print(re.findall(r'a(.*?)b',str))#['a', '', 'a']
 
str = '''aabbab
         aabbaa
         bb'''     #后面多加了2個(gè)b
 
# 沒(méi)有把最后一個(gè)換行的aab算進(jìn)來(lái)
print(re.findall(r'a.*?b',str))#['aab', 'ab', 'aab']
 
# re.S不會(huì)對(duì)\n進(jìn)行中斷
print(re.findall(r'a.*?b',str,re.S))#['aab', 'ab', 'aab', 'aa\n         b']

注意'.*?'是對(duì)它的前后部分作為開始結(jié)束部分進(jìn)行截取,而'(.*?)'也是把其前后作為開始結(jié)束,但是只截取括號(hào)部分,不包含開始結(jié)束部分!?。。ㄍ瑫r(shí)在對(duì)前后部分的選擇時(shí)要注意特征明確點(diǎn),就是與眾不同的的嘛,防止截取出的是其他部分?。?/p>

re.findall中參數(shù)re.S的意義:

1.字符串變?yōu)椋ê竺娑嗉恿?個(gè)b)

str = '''aabbab
         aabbaa
         bb'''

2.參數(shù)無(wú)re.S,沒(méi)有把最后一個(gè)換行的aab算進(jìn)來(lái)

print(re.findall(r'a.*?b',str))
#['aab', 'ab', 'aab']

3.參數(shù)有re.S,不會(huì)對(duì)\n進(jìn)行中斷

print(re.findall(r'a.*?b',str,re.S))
#['aab', 'ab', 'aab', 'aa\n         b']

在我們一開始的代碼中就有re.s,因?yàn)樵谂廊【W(wǎng)頁(yè)的內(nèi)容時(shí)是按照一個(gè)一個(gè)塊的來(lái)爬取,可以理解為并列部分,會(huì)存在/n分行符。

def parse_response(html):
    pattern = re.compile('class=\'tab-details\'>(.*?)</span>',re.S)
    items = re.findall(pattern,html)  
    print(items)
    
    return items

參考:

1.HTML input pattern 屬性 

2.Pattern用法(正則表達(dá)式)

3.JavaScript compile() 方法

4.Python 正則表達(dá)re模塊之findall()詳解

總結(jié)

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

相關(guān)文章

  • python遞歸實(shí)現(xiàn)鏈表快速倒轉(zhuǎn)

    python遞歸實(shí)現(xiàn)鏈表快速倒轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了python遞歸實(shí)現(xiàn)鏈表快速倒轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Pandas中DataFrame中的nan值處理

    Pandas中DataFrame中的nan值處理

    本文主要介紹了Pandas中DataFrame中的nan值處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • 一文詳解python中dataclass的使用技巧

    一文詳解python中dataclass的使用技巧

    dataclass是從Python3.7版本開始,作為標(biāo)準(zhǔn)庫(kù)中的模塊被引入,隨著Python版本的不斷更新,dataclass也逐步發(fā)展和完善,為Python開發(fā)者提供了更加便捷的數(shù)據(jù)類創(chuàng)建和管理方式,本文總結(jié)了幾個(gè)我平時(shí)使用較多dataclass技巧,需要的朋友可以參考下
    2024-03-03
  • Python+OpenCV人臉檢測(cè)原理及示例詳解

    Python+OpenCV人臉檢測(cè)原理及示例詳解

    這篇文章主要為大家詳細(xì)介紹了Python+OpenCV人臉檢測(cè)原理及示例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 基于python tornado實(shí)現(xiàn)圖床功能

    基于python tornado實(shí)現(xiàn)圖床功能

    因?yàn)橘I了阿里/騰訊的云服務(wù)器,但是使用云存儲(chǔ)還需要收費(fèi),又加上家里正好有一臺(tái)nas,又加上閑的沒(méi)事,所以搞了一個(gè)小腳本,這個(gè)項(xiàng)目主要功能是為typora增加一個(gè)自定義圖床,本文給大家介紹基于python tornado實(shí)現(xiàn)圖床功能,感興趣的朋友一起看看吧
    2023-08-08
  • 解決json中ensure_ascii=False的問(wèn)題

    解決json中ensure_ascii=False的問(wèn)題

    這篇文章主要介紹了解決json中ensure_ascii=False的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python ckeditor富文本編輯器代碼實(shí)例解析

    Python ckeditor富文本編輯器代碼實(shí)例解析

    這篇文章主要介紹了Python ckeditor富文本編輯器代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • python實(shí)現(xiàn)彩色圖轉(zhuǎn)換成灰度圖

    python實(shí)現(xiàn)彩色圖轉(zhuǎn)換成灰度圖

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)彩色圖轉(zhuǎn)換成灰度圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Python實(shí)現(xiàn)3行代碼解簡(jiǎn)單的一元一次方程

    Python實(shí)現(xiàn)3行代碼解簡(jiǎn)單的一元一次方程

    這篇文章主要介紹了Python實(shí)現(xiàn)3行代碼解簡(jiǎn)單的一元一次方程,很適合Python初學(xué)者學(xué)習(xí)借鑒,需要的朋友可以參考下
    2014-08-08
  • 使用Python實(shí)現(xiàn)with結(jié)構(gòu)的@contextmanager方法詳解

    使用Python實(shí)現(xiàn)with結(jié)構(gòu)的@contextmanager方法詳解

    這篇文章主要介紹了使用Python實(shí)現(xiàn)with結(jié)構(gòu)的@contextmanager方法詳解,這個(gè)結(jié)構(gòu)的好處,一個(gè)是簡(jiǎn)潔,一個(gè)是當(dāng)我們對(duì)文件操作的邏輯很長(zhǎng)的時(shí)候,不會(huì)因?yàn)橥岁P(guān)閉文件而造成不必要的錯(cuò)誤,需要的朋友可以參考下
    2023-07-07

最新評(píng)論