日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python正则_Python基础12之Python正则

發布時間:2025/4/16 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python正则_Python基础12之Python正则 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上圖施工計劃,已完成專題:

1.數字專題

2.字符串專題

3.列表專題

4.流程控制專題

5.編程風格專題

6.函數使用專題

7.面向對象編程(上篇)

8.面向對象編程(下篇)

9.Python基礎9之數據結構(上)

10.Python基礎9之數據結構(下)

11.Python基礎10之類、包、模塊

正則使用需要掌握的主要知識,整篇文章的結構總結如下:

  • 1 學習正則的價值

  • 2 正則學習前的幾個準備

    • Q1 字符 `r`是干啥的?

    • Q2 什么是一個原子操作?

    • Q3 怎么理解正則中的轉義?

  • 3 掌握最常用規則

    • 情況1:最普通查找

    • 情況2:使用通用字符

    • 情況3:使用元字符

  • 4 有個棘手的場景

  • 5 學會提取子串的技能

  • 6 使用捕獲的注意事項

1 學習正則的價值

正則應用廣泛。不僅在Python語言中使用,其他語言也都在用,并且不同語言間的正則語法極為相似。同時主流操作系統,尤其linux系統的命令窗口中,也會經常使用到正則。還有,Python的常用包如Pandas,也經常遇到正則。

不僅使用廣泛,正則功能也很強大,還有書寫簡便,因此這項技能值得我們仔細研究和掌握。

2 正則學習前的幾個準備

Q1 字符?r是干啥的?

經常見過正則表達式前有一個字符?r,它的作用是告訴解釋器后面的一串是原生字符串,按照字面意思解釋即可。如:

r'\n.*'

它告訴編譯器s串第一個字符是\,第二個字符是n.打印的結果就是它本身:

\n.*

而如果不帶前綴字符r,即:

'\n.*'

解釋器認為前兩個字符\n為轉義字符,一個新行的意思,打印結果為一個換行加.*,如下所示:


.*

Q2 什么是一個原子操作?

微觀世界中,如果定義原子是組成事物的最基本單元,那么就可理解為原子不能再分了。同理此處,正則的原子操作是指不能再被分割的正則表達式操作。

如正則中的+指前面的一個原子操作出現至少1次。例如:66+表示第一個字符為6,第二個字符6和第三個字符+聯合起來表示至少出現1次字符6,因此綜合起來至少要有2個6緊鄰的串才能滿足此正則表達式(下面會詳細講到)。

\w+表示字母數字下劃線中的任意一個字符(\w指代的)至少出現1次,那么\w就是一個原子操作。

因此,普通字符是原子,正則中的通用字符(下面會講到)也是原子。大家記住原子這個概念。

Q3 怎么理解正則中的轉義?

正則世界中,重新定義了幾個新的轉義字符。

一個轉義字符\+一個字符,轉義后會改變原字符的意義,它不再是它,而是賦予一個新的含義。

例如,w本身就是一個英文字符w,沒有其他任何含義。但是,前面加一個轉義字符?\后,含義發生重大改變,w它不再是w,而是\要與w連在一起,被解釋器解釋為匹配以下字符集合中的任意一個:

'\w'

等于:

pat?=?'[0123456789
??????AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
??????_]'

即匹配數字、大小寫字母和下劃線_字符集合中的任意一個。

你看,一個通用轉義字符\w直接就指代上面這一大串,寫法多么簡便,同時在正則的世界里又經常被用到,故被稱為:通用正則字符

類似的通用正則字符還有幾個,下面也會講到。做一件事前,把規則弄清,觸類旁通,相信大家理解其他幾個也沒問題。

3 掌握最常用規則

為了更清晰的展示,咱們只涉及最常用的規則,一來縮短篇幅,二來降低大家學習曲線,三來一類問題掌握一個,觸類旁通即可。

情況1:最普通查找

最普通查找就是需要找啥就寫啥,沒有使用正則的規則。如下是關于小說《燦爛千陽》中的一段話,從中找出單詞friendship,可能出現多次:

s?=?"""
#?Mariam?is?only?fifteen?
#?when?she?is?sent?to?Kabul?to?marry?the?troubled?and?bitter?Rasheed,
#?who?is?thirty?years?her?senior.?
#?Nearly?two?decades?later,?
#?in?a?climate?of?growing?unrest,?tragedy?strikes?fifteen-year-old?Laila,?
#?who?must?leave?her?home?and?join?Mariam's?unhappy?household.?
#?Laila?and?Mariam?are?to?find?consolation?in?each?other,?
#?their?friendship?to?grow?as?deep?as?the?bond?between?sisters,?
#?as?strong?as?the?ties?between?mother?and?daughter.?
#?With?the?passing?of?time?comes?Taliban?rule?over?Afghanistan,?
#?the?streets?of?Kabul?loud?with?the?sound?of?gunfire?and?bombs,?
#?life?a?desperate?struggle?against?starvation,?brutality?and?fear,?
#?the?women's?endurance?tested?beyond?their?worst?imaginings.?
#?Yet?love?can?move?a?person?to?act?in?unexpected?ways,?
#?lead?them?to?overcome?the?most?daunting?obstacles?with?a?startling?heroism.?
#?In?the?end?it?is?love?that?triumphs?over?death?and?destruction.?
#?A?Thousand?Splendid?Suns?is?an?unforgettable?portrait?of?a?wounded?country?and
#??a?deeply?moving?story?of?family?and?friendship.?
#??It?is?a?beautiful,?heart-wrenching?story?of?an?unforgiving?time,?
#??an?unlikely?bond?and?an?indestructible?love.
"""

使用正則前,先導入re模塊,再定義正則表達式,然后使用findall方法找出所有匹配

import?re

以上就是使用正則的最普通例子。如果要找出前綴為grow的單詞,比如可能為grows, growing 等,最普通查找實現起來就不方便。

然而,借助于下面介紹的元字符、通用字符和捕獲組合起來,便能應對解決復雜的匹配查找問題。

情況2:使用通用字符

在正則的世界里,通用字符指幫助我們更加簡便的寫出匹配規則的字符。

如上面文字,下面正則匹配串能找出以d開始,[a-z]表示的任意一個小寫英文字符,{7}表示小寫英文字符出現7次(下面情況3會說到),也就是匹配出來的子串長度為1+7=8:

'd[a-z]{7}'

匹配結果為:

'daughter',?

同理,模式串pat = 'd[a-z]{10}'匹配的結果為:

'destruction',?

模式串pat = 'd[a-z]{11}'匹配的結果為:

'destructible']

你看,通用字符[a-z]使用真方便,5個字符一下就表達了所有26個小寫的字符,但是注意[a-z]匹配26個小寫字符的任意一個.

類似功能的通用字符還包括:

[A-Z]??匹配大寫英文字母
[0-9]??匹配一個0-9之間的數字

還有更加強大的通用字符:

\s??匹配空白字符,如\n?\t?\b等
\w??匹配任意字母、數字、下劃線?
\d??匹配十進制數字0-9

而\S, \W, \D 分別對應 \s, \w, \d匹配字符集的補集,例如\S 的意思是匹配 \s 以外的其他任意字符。

情況3:使用元字符

元的含義大家不妨理解為用來描述它后面事物的類,如元類用來創建描述類的類,元模型描述一個模型的模型,因此推而廣之,元字符用來描述字符的字符。

理解以上后,你再看正則中使用最普遍的一個元字符?+,它是用來描述前面一個原子出現次數的字符,表示前一個原子出現1次或多次都可。

例如,在尋找手機靚號時,正則表達式66+,表示前一個原子6至少出現1次,因此連上第一個6,表示電話號碼中至少有兩個66緊鄰。因此,電話號碼18612652166、17566665656都滿足要求,而號碼18616161616不符合要求。

類似功能的元字符,還包括如下。功能相似,不再贅述:

*?前面的原子重復0次、1次、多次?

4 有個棘手的場景

了解以上規則后,我們能去完成很多匹配任務,比如一些字符串匹配任務;查找某個手機號是不是靚號;找到文字中出現某個模式的所有地方。

但是,使用正則還會經常遇到的一大場景。試想,從一個文件里提取出所有如下格式的鏈接,并全部導出來:

https://github.com/jackzhenguo/python-small-examples

https://gitbook.cn/gitchat/column/5e37978dec8d9033cf916b5d

截止目前,我們還不能完成這樣的匹配任務。鑒于這種匹配任務確實很常見,因此你很有必要學會下面這項技能。

5 學會提取子串的技能

今天以我寫過的《Python 60天》專欄中的一段文字,提取出里面的鏈接為例,闡述提取子串的實用性。

先貼上文字(有刪減改動),將這段文字賦值給變量?urls:

"""
基于 Python 的包更是枝繁葉茂,遍地開花,“Tiobe 編程語言排行榜”最新統計顯示 Python 是增長最快的語言。
![image-20200131192231967](https://images.gitbook.cn/2020-02-05-014719.png)
接下來,與大家,還有遠在美國做 AI 博士后研究的 Alicia,一起開始我們的 60?天 Python 探索之旅吧。
所有的這些考慮,都是為了讓大家在短時間內掌握 Python 技術棧,多一個生存的本領。拿到理想的 Offer 后,早日過上自己想要的生活。
讓我們開始吧。
如下,按照是否為靜態/動態語言,弱類型/強類型兩個維度,
總結常用的語言分類。
![image-20200205155429583](https://images.gitbook.cn/2020-02-05-080211.png)?###?四大基本語法
"""

你可能很快寫出如下的正則表達式:

#?元字符.表示匹配除\n字符外的任意一個字符

然后導入re模塊,使用findall方法找出所有匹配:

import?re

運行結果顯示如下,觀察發現2個匹配,但是每個匹配鏈接都包括冗余字符,因此匹配錯誤:

'https://images.gitbook.cn
/2020-02-05-014719.png)',

我們再稍微優化原正則表達式為:

#?添加?\)?表示待匹配子串以右括號結尾

打印結果顯示如下,結果確實好一點,但是依然包括右括號,結果還是錯誤的:

'https://images.gitbook.cn/
2020-02-05-014719.png)',?

所以掌握提取子串的技能就很重要,實現提取子串也很簡單,只需把想要返回的子串加上一對括號就行,如下所示:

#?把想要返回的子串外面添加一對括號

此時返回結果完全正確,無任何多余字符。想要返回的子串外面添加一對括號還有個專業叫法:捕獲或分組。

6 使用捕獲的注意事項

捕獲功能非常實用,使用它需要區分一點,貪婪捕獲和非貪婪捕獲。前者指在滿足匹配模式前提下,返回包括盡可能多的字符匹配模式;后者指滿足匹配條件下,盡可能少的捕獲。

我們偽造一個理想狀況下的案例:

htmlContent?=?"""
????????<div><div><h2>這是二級標題h2>div><div><p>?這是一個段落>/p>div>div>
"""

貪心捕獲使用(.*),如下所示:

r"(.*)"

結果為如下,盡可能長的捕獲,而不是遇到第一個

時就終止:<div>

而非貪心捕獲的正則表達式為

(.*?)",如下:r"(.*?)"

結果為兩個元素,遇到第一個

時終止,然后繼續捕獲出第二子串:<div>

以上例子僅僅用作演示兩者區別,實際的html結構含有換行符等,環境比上面要復雜的多,貪心和非貪心捕獲的寫法可能不會導致結果不同,但是我們依然需要理解它們的區別。

關注公眾號送免費資料
回復Jenkins?領取Jenkins學習資料回復Jmeter?領取Jmeter學習資料

回復Java? ?領取Java學習資料

回復Python?領取python入門資料

回復RobotFramework???領取RobotFramework 框架搭建資料

你可能會喜歡

  • Jmeter關聯系列_數據驅動中的業務邏輯關聯

  • docker搭建接口自動化持續集成框架

  • python28:迷宮游戲最短路徑算法

  • Python基礎11之類和包和模塊

  • 神經網絡初探4:Tensorflow2.0數據集與神經網絡初探

  • 盤一盤 Python 系列基礎篇十一之 機器學習 Sklearn

  • 盤一盤 Python 系列特別篇21之:SciPy 稀疏矩陣

  • Linux環境部署之ubuntu網絡配置

  • 性能測試指標7:性能測試的階段性工作

  • jmeter之對jar包進行調用

  • jmeter之爬取網絡圖片

  • 軟件質量保障體系圖

  • 研發過程中的測試工作

  • APP測試流程及測試點

  • WEB測試范圍小結

測試交流,加我備注【測試交流】拉入交流群,更有不定期資料贈送,敬請期待

本文轉載自【Python與算法社區

總結

以上是生活随笔為你收集整理的python正则_Python基础12之Python正则的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久av免费| 久草久热 | 亚洲欧洲精品一区 | 91caob| 美女精品久久久 | 日韩一级特黄 | 激情欧美一区二区免费视频 | 一区二区网 | 成人亚洲天堂 | 欧美一级免费观看 | 成人性生生活性生交全黄 | 国产一级二级三级 | 偷拍第一页 | h在线免费观看 | 精品成人一区二区三区久久精品 | av在线视 | 亚洲自拍av在线 | 一区二区三区四区av | 亚洲看片 | 久久少妇av | 国产在线看 | 伊人中文网 | 台湾150部性三级 | 性色影院| 又大又长粗又爽又黄少妇视频 | 麻豆一区二区在线观看 | 久久久人体 | 中文字幕丝袜诱惑 | 国产成人av在线 | 自拍偷拍亚洲精品 | 男人的天堂视频在线观看 | 国产毛片毛片毛片 | 久久字幕 | 日韩一区二区三区av | 午夜视频在线观看网站 | 国产区123| 久久大综合 | 日韩免费一级 | 涩涩视频网站在线观看 | 国产一区二区伦理 | 狠狠操五月天 | 调教少妇视频 | 在线免费av播放 | 丰满熟女人妻一区二区三区 | 欧美韩日国产 | 777777av| 人人人人爽 | av在线资源网站 | 综合久久综合 | 思思99精品视频在线观看 | 一道本不卡视频 | 欧美精品一区三区 | 亚洲 另类 春色 国产 | 亚洲成人免费看 | 超碰导航 | 精品国产av一区二区三区 | www激情com | 91精品国产综合久久久久久久 | 国产极品在线观看 | 少妇学院在线观看 | 综合激情视频 | 可以看av| 成人激情视频网站 | 日韩精品视频在线 | 精品成人无码久久久久久 | 日韩青青草 | 三级欧美韩日大片在线看 | 男人都懂的网址 | 特黄在线 | 爱爱免费视频网站 | www日日日 | 日本黄色视 | 欧美熟妇交换久久久久久分类 | xxxx18日本| 中文字幕av免费在线观看 | 69色综合 | 久久精品亚洲精品国产欧美 | 91精品国产手机 | 肉色超薄丝袜脚交一区二区图片 | 97公开免费视频 | 日b视频免费观看 | 色网站在线 | 久草综合视频 | www日韩| 精品视频久久久久久 | 欧美亚洲另类在线 | 美女黄污网站 | 亚洲精品911 | 加勒比综合 | 亚洲精品在线影院 | 亚洲29p| 免费看片视频 | 人妻丰满熟妇无码区免费 | 精品一区二区三区无码视频 | 中文字幕在线视频一区二区 | 国产成人一区二区三区别 | 免费看美女被靠到爽的视频 | 精品在线观看免费 | 一区二区在线 |