国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

詳解Python正則表達式(含豐富案例)

這篇具有很好參考價值的文章主要介紹了詳解Python正則表達式(含豐富案例)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言:正則表達式在網(wǎng)絡(luò)爬蟲、數(shù)據(jù)分析中有著廣泛使用,掌握正則表達式能夠達到事半功倍的效果。本文詳細介紹正則表達式中各種規(guī)則及其符號含義,并結(jié)合Python中的Re庫進行演示,由淺入深,即學(xué)即練即用,內(nèi)容豐富,非常適合初學(xué)者。

正則表達式(regular expression)就是用一組由字母和符號組成的“表達式”來描述一個特征,然后去驗證另一個“字符串”是否符合這個特征。比如表達式“xy+” 描述的特征是“一個 ‘x’ 和 至少一個 ‘y'?”,那么‘xy',‘xyy', ‘xyyyyyyy'都符合這個特征。

正則表達式主要應(yīng)用場景

  • 驗證字符串是否符合指定特征,比如驗證用戶名或密碼是否符合要求、是否是合法的郵件地址等;

  • 用來查找字符串,從一個長的文本中查找符合指定特征的字符串,比查找固定字符串更加靈活方便;

  • 用來替換,比普通的替換更強大。

正則表達式的規(guī)則

(1)普通字符

字母、數(shù)字、漢字、下劃線、以及沒有特殊定義的標(biāo)點符號,都是"普通字符"。表達式中的普通字符,在匹配一個字符串的時候,匹配與之相同的一個字符。

例1:表達式?“c”,在匹配字符串?“abcde”?時,匹配結(jié)果是:成功;匹配到的內(nèi)容是:“c”;匹配到的位置是:開始于2,結(jié)束于3。(包含開始位置,不包含結(jié)束位置

例2:表達式 "bcd",在匹配字符串"abcde"時,匹配結(jié)果是:成功;匹配到的內(nèi)容是:"bcd";匹配到的位置是:開始于1,結(jié)束于4。

(2)轉(zhuǎn)義字符

  • 一些不便書寫的字符,采用在前面加“\” 的方法。例如制表符、換行符等;

  • 一些有特殊用處的標(biāo)點符號,在前面加“\” 后,代表該符號本身。例如{,}, [, ], /, \, +, *, ., $, ^, |, ??等;

詳解Python正則表達式(含豐富案例)

轉(zhuǎn)義字符的匹配方法與“普通字符”類似,也是匹配與之相同的一個字符。

例如:表達式?"\$d",在匹配字符串?"abc$de"?時,匹配結(jié)果是:成功;匹配到的內(nèi)容是:"$d";匹配到的位置是:開始于3,結(jié)束于5。

(3)能夠與 '多種字符' 匹配的表達式

正則表達式中的一些表示方法,可以匹配 ‘多種字符’ 中的任意一個字符。例如,表達式"\d" 可以匹配任意一個數(shù)字。雖然可以匹配其中任意字符,但是只能是一個,不是多個。

詳解Python正則表達式(含豐富案例)

例如:表達式?"\d\d",在匹配?"abc123"?時,匹配的結(jié)果是:成功;匹配到的內(nèi)容是:"12";匹配到的位置是:開始于3,結(jié)束于5。

(4)自定義能夠匹配 '多種字符' 的表達式

使用方括號 [ ] 包含一系列字符,能匹配其中任意一個字符。用 [^ ] 包含一系列字符,則能匹配其中字符之外的任意一個字符。雖然可以匹配其中任意一個,但是只能是一個,不是多個。

詳解Python正則表達式(含豐富案例)

例如:表達式?"[bcd][bcd]"?匹配?"abc123"?時,匹配的結(jié)果是:成功;匹配到的內(nèi)容是:"bc";匹配到的位置是:開始于1,結(jié)束于3。

(5)修飾匹配次數(shù)的特殊符號

詳解Python正則表達式(含豐富案例)

例如:表達式?"\d+\.?\d*"?在匹配?"It?costs?$12.5"?時,匹配的結(jié)果是:成功;匹配到的內(nèi)容是:"12.5";匹配到的位置是:開始于10,結(jié)束于14。

(6)一些代表抽象意義的特殊符號

詳解Python正則表達式(含豐富案例)

例1:表達式?"^aaa"?在匹配?"xxxaaaxxx"?時,匹配失敗。因為?"^"?要求與字符串開始的地方匹配,只有當(dāng)?"aaa"?位于字符串的開頭的時候,"^aaa"?才能匹配,比如:"aaaxxxxxx"。

例2:表達式 "aaa$"在匹配 "xxxaaaxxx" 時,匹配失敗。因為"$" 要求與字符串結(jié)束的地方匹配,只有當(dāng)"aaa"位于字符串的結(jié)尾的時候,"aaa$"才能匹配,比如:"xxxxxxaaa"。

例3:表達式?"Tom|Jack"在匹配字符串?"I'mTom, he is Jack"?時,匹配結(jié)果是:成功;匹配到的內(nèi)容是:"Tom";匹配到的位置是:開始于4,結(jié)束于7。匹配下一個時,匹配結(jié)果是:成功;匹配到的內(nèi)容是:"Jack";匹配到的位置時:開始于15,結(jié)束于19。

例4:表達式?"(go\s*)+"在匹配?"Let'sgo?gogo!"時,匹配結(jié)果是:成功;匹配到內(nèi)容是:"gogogo";匹配到的位置是:開始于6,結(jié)束于14。

例5:表達式?"¥(\d+\.?\d*)"在匹配?"$10.9,¥20.5"時,匹配的結(jié)果是:成功;匹配到的內(nèi)容是:"¥20.5";匹配到的位置是:開始于6,結(jié)束于10。單獨獲取括號范圍匹配到的內(nèi)容是:"20.5"。

思考題:寫出滿足下列要求的正則表達式

  • 僅含6位數(shù)字的字符串??

  • 18位身份證號碼(最后一位可能包含X)

  • 密碼(以字母開頭,長度在6~18之間,只能包含字母、數(shù)字和下劃線)

匹配次數(shù)中的貪婪與非貪婪

在使用修飾匹配次數(shù)的特殊符號時,如“?”,“*”, “+”等,可以使同一個表達式能夠匹配不同的次數(shù),具體匹配的次數(shù)隨被匹配的字符串而定。這種重復(fù)匹配不定次數(shù)的表達式在匹配過程中,總是盡可能多的匹配,這種匹配原則就叫作"貪婪" 模式?。例如,針對文本“dxxxdxxxd”,下列表達式匹配結(jié)果如下。

詳解Python正則表達式(含豐富案例)

在修飾匹配次數(shù)的特殊符號后再加上一個"?" 號,則可以使匹配次數(shù)不定的表達式盡可能少的匹配,使可匹配可不匹配的表達式,盡可能的 "不匹配"。這種匹配原則叫作"非貪婪" 模式。如果少匹配就會導(dǎo)致整個表達式匹配失敗的時候,與貪婪模式類似,非貪婪模式會最小限度的再匹配一些,以使整個表達式匹配成功。例如,針對文本“dxxxdxxxd”,下列表達式匹配結(jié)果如下。

詳解Python正則表達式(含豐富案例)

Python中的正則表達式庫 - re

  • re庫是Python的標(biāo)準庫,不需要額外安裝,主要用于字符串匹配

  • 調(diào)用方式:import re

  • re 庫采用raw string類型表示正則表達式,rawstring是不包含對轉(zhuǎn)義符再次轉(zhuǎn)義的字符串。例如:r'[1‐9]\d{5}’

  • re庫也可以采用string類型表示正則表達式,但更繁瑣,例如“'[1‐9]\\d{5}'”

  • 當(dāng)正則表達式包含轉(zhuǎn)義符時,建議使用raw string

re庫的主要功能函數(shù)

詳解Python正則表達式(含豐富案例)

詳解Python正則表達式(含豐富案例)

詳解Python正則表達式(含豐富案例)

注意group()和groups()的區(qū)別,一個是返回匹配的字符串,一個是返回各部分匹配內(nèi)容組成的元組。當(dāng)表達式中沒有圓括號時,groups()返回的是空元組,當(dāng)存在圓括號時,有幾個圓括號groups()返回的元組里就有幾個元素。

詳解Python正則表達式(含豐富案例)

詳解Python正則表達式(含豐富案例)

詳解Python正則表達式(含豐富案例)

詳解Python正則表達式(含豐富案例)

詳解Python正則表達式(含豐富案例)

正則表達式案例-驗證用戶名

編寫程序?qū)崿F(xiàn)下述功能,提示用戶輸入用戶名,要求用戶名以字母開頭,長度不少于3位,只能包含字母、數(shù)字、下劃線,如果用戶輸入符合要求,則提示注冊成功,否則提示用戶名不符合要求,請重新輸入,一直循環(huán)直到用戶名符合要求為止。程序執(zhí)行效果如下圖所示。

詳解Python正則表達式(含豐富案例)

參考代碼如下:?

import re  # 導(dǎo)入正則表達式庫
name = input("請輸入用戶名,以字母開頭,長度不少于3位,只能包含字母、數(shù)字、下劃線:")  # 提示用戶輸入
match = re.match(r"^[a-zA-Z]\w{2,}$", name)  # 驗證輸入是否符合要求
while match is None:  # 如果不符合要求,則循環(huán)
    print("用戶名不符合要求,請重新輸入:", end=" ")  # 提示用戶名不符合要求
    name = input()  # 重新獲取用戶輸入
    match = re.match(r"^[a-zA-Z]\w{2,}$", name)  # 驗證輸入是否符合要求
print("恭喜你, {} ,注冊成功!".format(name))  # 提示注冊成功

思考:

  • 正則表達式前面的^能夠省略?為什么?
  • 有沒有其它等價的正則表達式寫法?
  • 正則表達式最后的$能否省略?為什么?

正則表達式案例-編程語言排行

  • 數(shù)據(jù)來源:https://www.tiobe.com/tiobe-index/網(wǎng)頁源代碼,保存到”編程語言排行.txt”文件。

  • 部分內(nèi)容截圖如下,排行前十的編程語言數(shù)據(jù)存放在series屬性里,每項編程語言包含名稱(name)和數(shù)據(jù)(data)兩部分內(nèi)容,其中data部分包含該編程語言各個月份編程語言所占比例,。

詳解Python正則表達式(含豐富案例)

import re  # 正則表達式
import csv  # csv文件操作
with open("編程語言排行.txt", mode="r", encoding="utf-8") as fp:  # 打開指定文件
    text = fp.read()  # 讀取文件內(nèi)容
content = " ".join(re.findall(r"series: (.*?)\}\);", text, re.DOTALL))  # 獲取所有編程語言數(shù)據(jù)
total_content = re.findall(r"({.*?})", content, re.DOTALL)  # 獲取各個編程語言的具體數(shù)據(jù)
with open("lang.csv", mode="w", encoding="utf-8", newline="") as fp:  # 對數(shù)據(jù)進行處理并保存到文件
    writer = csv.DictWriter(fp, ['name', 'value', 'date'])
    writer.writeheader()  # 寫入標(biāo)題
    for item in total_content:
        name = " ".join(re.findall(r"name : '(.*?)'", item, re.DOTALL))
        temp_datas = re.findall(r"\[Date.UTC(.*?)\]", item, re.DOTALL)  # 獲取不同時間的熱度信息
        for data in temp_datas:
            data = data.replace(" ", "").replace("(", "").replace(")", "")
            value = data.split(",")[-1]  # 熱度值
            date = data.split(",")[:-1]  # 日期信息
            writer.writerow({"name": name, "value": value, "date": "{}-{:02d}-{:02d}".format(date[0], int(date[1]) + 1, int(date[2]))})

部分數(shù)據(jù)截圖效果如下:

詳解Python正則表達式(含豐富案例)

完整課件下載網(wǎng)址:https://download.csdn.net/download/Dream_Gao1989/81021441文章來源地址http://www.zghlxwxcb.cn/news/detail-437828.html

到了這里,關(guān)于詳解Python正則表達式(含豐富案例)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 詳解Python正則表達式中g(shù)roup與groups的用法

    詳解Python正則表達式中g(shù)roup與groups的用法

    在Python中,正則表達式的group和groups方法是非常有用的函數(shù),用于處理匹配結(jié)果的分組信息。 group方法是re.MatchObject類中的一個函數(shù),用于返回匹配對象的整個匹配結(jié)果或特定的分組匹配結(jié)果。而groups方法同樣是re.MatchObject類中的函數(shù),它返回的是所有分組匹配結(jié)果組成的元組

    2024年02月13日
    瀏覽(16)
  • 【從零學(xué)習(xí)python 】65. Python正則表達式修飾符及其應(yīng)用詳解

    修飾符 描述 re.I 使匹配對大小寫不敏感 re.M 多行匹配,影響 ^ 和 $ re.S 使 . 匹配包括換行在內(nèi)的所有字符 示例代碼如下: 以上是關(guān)于正則表達式修飾符的介紹和示例。修飾符可以根據(jù)需要來調(diào)整正則表達式的匹配方式,從而更加靈活地處理字符串匹配問題。使用合適的修飾

    2024年02月11日
    瀏覽(91)
  • 【100天精通python】Day23:正則表達式,基本語法與re模塊詳解示例

    ? 目錄 ?專欄導(dǎo)讀? 1?正則表達式概述 2 正則表達式語法 2.1?正則表達式語法元素

    2024年02月14日
    瀏覽(50)
  • Vue表單提交正則表達式驗證使用案例

    一、驗證表單用法 1、表單布局及變量定義 2、定義表單中用到的實例、變量、交互dto等 3、驗證規(guī)則表達式 說明: 1、sendRules?是表單使用的驗證規(guī)則對象 2、屬性?xxxNo?是具體校驗?zāi)莻€屬性字段 3、屬性 required?非空校驗 4、屬性?message?提示字樣 5、屬性?trigger?觸發(fā)事件 6、

    2024年02月16日
    瀏覽(21)
  • 正則表達式常用字符及案例

    正則表達式是一種強大而靈活的工具,它在文本搜索和處理中起到了至關(guān)重要的作用。熟練掌握正則表達式的常用字符和使用方法,將能幫助開發(fā)者更加高效地進行模式匹配和字符串操作。本文將介紹一些常見的正則表達式字符,并給出一些實際案例來進一步理解其應(yīng)用。

    2024年02月15日
    瀏覽(22)
  • Shell 正則表達式及綜合案例及文本處理工具

    Shell 正則表達式及綜合案例及文本處理工具

    ?目錄 一、常規(guī)匹配 二、常用特殊字符 三、匹配手機號 四、案例之歸檔文件 五、案例之定時歸檔文件 六、Shell文本處理工具 1. cut工具 2. awk工具 一串不包含特殊字符的正則表達式匹配它自己 例子,比如說想要查看密碼包含root字符串的,可以這樣寫 cat /etc/passwd | grep root 特

    2024年01月17日
    瀏覽(71)
  • Matlab字符操作進階:正則表達式(附上多個案例源碼)

    Matlab是一種強大的編程語言和環(huán)境,廣泛應(yīng)用于科學(xué)計算、數(shù)據(jù)分析和算法開發(fā)。在Matlab中,使用字符正則表達式可以對字符串進行高級操作和處理。本文將介紹Matlab中字符正則表達式的基本語法和常見應(yīng)用。 首先,我們需要了解正則表達式的基本概念。正則表達式是一種用

    2024年02月09日
    瀏覽(20)
  • 正則表達式詳解

    正則表達式(Regular Expression),通常簡稱為正則或正則表達式,是一種用于描述字符串模式的工具。它是由一系列字符和特殊字符組成的字符串,用于定義搜索模式或進行字符串匹配、替換、提取等操作。 正則表達式提供了一種靈活、強大且通用的方式來處理文本。它可以用

    2024年01月17日
    瀏覽(21)
  • 正則表達式學(xué)習(xí)詳解

    正則表達式(Regular Expression),通常簡稱為正則或正則表達式,是一種用于描述字符串模式的工具。它是由一系列字符和特殊字符組成的字符串,用于定義搜索模式或進行字符串匹配、替換、提取等操作。 正則表達式提供了一種靈活、強大且通用的方式來處理文本。它可以用

    2024年02月13日
    瀏覽(20)
  • java正則表達式(附帶案例——檢測手機號碼是否合法)

    java正則表達式(附帶案例——檢測手機號碼是否合法)

    Java正則表達式是一種用于匹配字符串的模式,它可以用來檢查一個字符串是否符合某種格式,或者從一個字符串中提取出符合某種格式的子串。Java中的正則表達式使用java.util.regex包來實現(xiàn)。 以下是一些常用的Java正則表達式語法: 1. 字符類:用方括號[]表示,匹配方括號中的

    2024年02月11日
    瀏覽(98)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包