最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python正則表達(dá)式高級(jí)使用方法匯總

 更新時(shí)間:2020年06月18日 11:50:55   作者:guran0822  
這篇文章主要介紹了Python正則表達(dá)式高級(jí)使用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

正則表達(dá)式是一個(gè)以簡(jiǎn)單直觀的方式匹配指定文本信息從而達(dá)到查找、替換等操作的目的。正則表達(dá)式以其簡(jiǎn)單而高效的特點(diǎn)使得其在數(shù)據(jù)分析和數(shù)據(jù)驗(yàn)證方面應(yīng)用廣泛。

對(duì)于簡(jiǎn)單的正則表達(dá)式可以直接百度之,這里重點(diǎn)引薦下‘特殊'操作。

1.非貪婪模式 - {x,y}?

非貪婪模式是指在使用正則匹配時(shí),盡可能少的匹配(默認(rèn)是貪婪模式,即:盡可能多的匹配)。例:

>>> re.search(r'[\d]{2,5}?','091234568')

<_sre.SRE_Match object; span=(0, 2), match='09'>

在這里{2,5}?匹配只是匹配2-5個(gè)[\d]時(shí)只要滿足2(最少的)個(gè)就好,在看看貪婪模式:

>>> re.search(r'[\d]{2,5}','091234568')
<_sre.SRE_Match object; span=(0, 5), match='09123'>  

這時(shí)候,匹配2-5個(gè)[\d]時(shí),默認(rèn)匹配最多的5個(gè)。

注意:貪婪和非貪婪模式的區(qū)別就是重復(fù)操作符后有沒(méi)有?字符

2.分組

正則表達(dá)式提供了一個(gè)機(jī)制將表達(dá)式分組,匹配的結(jié)果也將按照表達(dá)式單獨(dú)分組。例:

>>> m = re.search(r'(\d{3})-(\d{5})','029-25642')
>>> m.group()
'029-25642'
>>> m.groups()
('029', '25642')
>>> m.group(2)
'25642'

可以通過(guò)m.groups()看到分組匹配結(jié)果,通過(guò)m.group(index)查看具體編號(hào)的分組結(jié)果(編號(hào)從1開(kāi)始,0是完整的匹配)。那分組有什么用呢,好像也沒(méi)什么特殊的含義,不急,下面會(huì)用到。

3.引用分組(回溯) - \N

有這么一種情況,比如假設(shè)我要找出一個(gè)html文本中的所有<a></a>標(biāo)簽,怎么辦?試試這樣:

>>> re.search(r'<(\w+)>.+</(\w+)>','<a>this is a demo</e>')
<_sre.SRE_Match object; span=(0, 21), match='<a>this is a demo</e>'>

奇怪的事情來(lái)了,為什么<a></e>被匹配成功了,顯然結(jié)果并不是想要的,那怎么才能只匹配<a></a>而過(guò)濾掉其他的呢(比如<a></e>)?答案就是引用分組,例:

>>> re.search(r'<(\w+)>.+</\1>','<a>this is a demo</e><p>demo two</p>')
<_sre.SRE_Match object; span=(21, 36), match='<p>demo two</p>'>  

這里\1是關(guān)鍵,意思就是當(dāng)前位置匹配的結(jié)果需要和第一個(gè)分組匹配的結(jié)果一致,或者說(shuō)第一個(gè)分組的匹配結(jié)果期望在這里再次出現(xiàn)。以此類推。該方法最多只能匹配前99個(gè)分組。

4.分組命名 - (?P<name>.*)

分組命名最開(kāi)始由python引入,比如Django路由中會(huì)用到。分組命名的好處是方便,直接使用名字比編號(hào)要簡(jiǎn)單而且不會(huì)變化,例:

>>> m = re.search(r'(?P<first_name>\d{3})-(?P<second_name>\d{4})','029-8967')
>>> m.group('first_name')
'029'
>>> m.groupdict()
 {'first_name': '029', 'second_name': '8967'}

當(dāng)然,命名分組仍然是編號(hào)分組,依然可以使用編號(hào)進(jìn)行查找分組。

5.先行斷言 - X(?!Y)、X(?=Y)

假設(shè)有這么一種情況,要查找所有163信箱的文本,也就是@163.com結(jié)尾的所有email賬號(hào)信息,也就是說(shuō)不要@163.com這部分,但是其還要參與匹配。這就用到了先行斷言,也即基于之后的內(nèi)容是否存在接收或拒絕一個(gè)匹配,而不需要接下來(lái)的內(nèi)容作為匹配的一部分。例:

>>> re.search(r'h(?!e)','hello home!')
<_sre.SRE_Match object; span=(6, 7), match='h'>

h(?!e)表示匹配h,而且h后面不能是e,此處匹配成功的是home,但是只返回h

>>> re.search(r'h(?=e)','hello home!')
<_sre.SRE_Match object; span=(0, 1), match='h'>

h(?=e)表示匹配he,此處匹配成功的是hello,但是只返回h

6.標(biāo)記

  • 不區(qū)分大小寫:re.IGNORECASE(簡(jiǎn)寫re.I)-使得正則表達(dá)式不區(qū)分大小寫
  • 點(diǎn)匹配換行符:re.DOTALL(簡(jiǎn)寫re.S)-使得 . 符號(hào)可以匹配換行符
  • 多行模式:re.MULTILINE(簡(jiǎn)寫re.M)-使得^$字符可以匹配任意行的開(kāi)始與結(jié)束
  • 詳細(xì)模式:re.VERBOSE(簡(jiǎn)寫re.X)-使得正則表達(dá)式可以換行書寫,且可以加入注釋
  • 調(diào)試模式:re.DEBUG-將調(diào)試信息輸出到sys.stderr
  • 使用多個(gè)標(biāo)記時(shí),使用|分隔,如re.S|re.M

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • jupyter notebook 實(shí)現(xiàn)matplotlib圖動(dòng)態(tài)刷新

    jupyter notebook 實(shí)現(xiàn)matplotlib圖動(dòng)態(tài)刷新

    這篇文章主要介紹了jupyter notebook 實(shí)現(xiàn)matplotlib圖動(dòng)態(tài)刷新,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • python如何通過(guò)Json路徑返回Json響應(yīng)對(duì)應(yīng)的值

    python如何通過(guò)Json路徑返回Json響應(yīng)對(duì)應(yīng)的值

    這篇文章主要介紹了python如何通過(guò)Json路徑返回Json響應(yīng)對(duì)應(yīng)的值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • flask框架路由常用定義方式總結(jié)

    flask框架路由常用定義方式總結(jié)

    這篇文章主要介紹了flask框架路由常用定義方式,結(jié)合實(shí)例形式總結(jié)分析了flask框架路由的常見(jiàn)定義方式與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-07-07
  • 詳解python實(shí)現(xiàn)可視化的MD5、sha256哈希加密小工具

    詳解python實(shí)現(xiàn)可視化的MD5、sha256哈希加密小工具

    這篇文章主要介紹了詳解python實(shí)現(xiàn)可視化的MD5、sha256哈希加密小工具,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • python爬蟲scrapy基于CrawlSpider類的全站數(shù)據(jù)爬取示例解析

    python爬蟲scrapy基于CrawlSpider類的全站數(shù)據(jù)爬取示例解析

    這篇文章主要介紹了python爬蟲scrapy基于CrawlSpider類的全站數(shù)據(jù)爬取示例解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 使用Python腳本對(duì)Linux服務(wù)器進(jìn)行監(jiān)控的教程

    使用Python腳本對(duì)Linux服務(wù)器進(jìn)行監(jiān)控的教程

    這篇文章主要介紹了使用Python程序?qū)inux服務(wù)器進(jìn)行監(jiān)控的教程,主要基于Python2.7的版本,需要的朋友可以參考下
    2015-04-04
  • 使用python對(duì)視頻文件分辨率進(jìn)行分組的實(shí)例代碼

    使用python對(duì)視頻文件分辨率進(jìn)行分組的實(shí)例代碼

    通過(guò)對(duì)視頻的分辨路進(jìn)行分類可以在需要的時(shí)候快速找到你想要的視頻分辨率。當(dāng)然人工去分類是一種比較費(fèi)時(shí)費(fèi)力的工作,通過(guò)軟件也好,程序也罷都是為了可以提高我們的工作效率。下面通過(guò)代碼給大家分享使用python對(duì)視頻文件分辨率進(jìn)行分組的方法,一起看看吧
    2021-10-10
  • Python將列表數(shù)據(jù)寫入文件(txt, csv,excel)

    Python將列表數(shù)據(jù)寫入文件(txt, csv,excel)

    這篇文章主要介紹了Python將列表數(shù)據(jù)寫入文件(txt, csv,excel),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Python面向?qū)ο缶幊袒A(chǔ)實(shí)例分析

    Python面向?qū)ο缶幊袒A(chǔ)實(shí)例分析

    這篇文章主要介紹了Python面向?qū)ο缶幊袒A(chǔ),結(jié)合實(shí)例形式分析了Python面向?qū)ο缶幊填惖亩x、繼承、特殊方法及模塊相關(guān)原理與操作技巧,需要的朋友可以參考下
    2020-01-01
  • python 裝飾器詳解與應(yīng)用范例

    python 裝飾器詳解與應(yīng)用范例

    裝飾器是 Python 的一個(gè)重要部分。簡(jiǎn)單地說(shuō):他們是修改其他函數(shù)的功能的函數(shù)。他們有助于讓我們的代碼更簡(jiǎn)短,也更Pythonic。大多數(shù)初學(xué)者不知道在哪兒使用它們,所以我將要分享下,哪些區(qū)域里裝飾器可以讓你的代碼更簡(jiǎn)潔。 首先,讓我們討論下如何寫你自己的裝飾器
    2021-11-11

最新評(píng)論

神池县| 天长市| 英吉沙县| 收藏| 沁源县| 会宁县| 弋阳县| 乌兰县| 微山县| 蓝山县| 青神县| 吉木萨尔县| 宁强县| 乐东| 哈巴河县| 班戈县| 昌宁县| 兰州市| 攀枝花市| 长沙县| 阜阳市| 曲松县| 株洲市| 环江| 孝义市| 佛坪县| 保德县| 白山市| 石屏县| 科技| 天台县| 揭阳市| 通州区| 清苑县| 连城县| 子洲县| 当雄县| 大足县| 皋兰县| 忻城县| 若尔盖县|