1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        這下女友總算滿意了!

        共 2942字,需瀏覽 6分鐘

         ·

        2021-07-05 15:34

        文 | 極光

        來源:Python 技術(shù)「ID: pythonall」

        上次跟女友介紹了正則表達式的基本語法,以及在 Python 中如何使用。結(jié)果她還不滿意,說傳說中的正則表達式就這么簡單?當然不是,今天就來跟大家一起介紹下正則表達式更多的使用技巧。

        小括號,大作用

        1. 一般用于獲取 () 中的正則內(nèi)容進行下一步操作使用,如果想要關(guān)閉這種獲取能力,可以在左括號 ( 后面加上 ?: 就可以了。

        2. 另一個作用就是讓括號內(nèi)正則表達式進行組合,方便使用之前介紹的 ?* + 等,還有或操作符 |

        當獲取了小括號里的內(nèi)容后,我們也可以反向引用 () 里的內(nèi)容,每一個小括號里的內(nèi)容,只要沒有使用 ?: ,就會被分配一個組號,從左到右從1開始遞增。

        在使用中,可以使用 \i 引用前面 () 里獲取的內(nèi)容。

        除了上面使用索引的方式反向引用外,還可以使用組名的方式引用。

        也就是通過左括號 ( 后面跟一個字串 ?P<組名> 的方式,來為這個組起一個別名,后面就可以通過 (?P=組名) 來引用這個組獲取的內(nèi)容了。例如想要匹配重復數(shù)字,可以使用 (?P<key>\d+)\s+(?P=key)

        斷言

        在實際使用中,我們需要對正則表達式使用斷言,來對文本進行部分約束,但斷言不會匹配任何文本。

        斷言說明
        \b匹配單詞的邊界
        \B匹配非單詞邊界,會受到ASCII標記影響
        \A/^從開始位置匹配, 如有MULTILINE標志,則^會在每個換行符后匹配
        \Z/$在結(jié)束位置匹配,如有MULTILINE標志,則$在每個換行符前匹配

        另外還有些特殊的,如正前瞻、負前瞻、正回顧、負回顧:

        • 正前瞻(?=e):如 表達式1(?=表達式2) 表達式3 ,則表式后面的內(nèi)容需要匹配表達式2;
        • 負前瞻(?!e):如 表達式1(?!表達式2) 表達式3 ,則表式后面的內(nèi)容不能匹配表達式2;
        • 正回顧(?<=e):如 (?<=表達式2)表達式1 表達式3 ,則表式前面的內(nèi)容需要匹配表達式2;
        • 負回顧(?<!e):如 (?<!表達式2)表達式1 表達式3 ,則表式前面的內(nèi)容不能匹配表達式2。

        例如我們想查找一個字串 python,而這個字串后面必須要跟著 data 字串,那我們就可以使用 (python)\s+(?=data)。

        這樣即使字串中有 python,但我們限定了只匹配這種情況,可以大大提高了準確率。

        條件表達

        相信大家在平時開發(fā)過程中會經(jīng)常用到三目運算符,比如 data == 1 ? 'Y' : 'N',在正則里也有類似的運算操作。

        表達式:(?(判斷表達式) 為真時執(zhí)行表達式| 為假時執(zhí)行表達式),當判斷表達式匹配到內(nèi)容的時候,則這里就會匹配為真時的表達式,否則就會匹配為假時的表達式。

        例如:(?(\d+) [\s\d,]| [\s,])

        正則的四大功能

        在我們平時用正則表達式處理字符串的時候,主要會使用到它的四大功能:

        1. 匹配:這個之前已經(jīng)詳細講過了,就是看這個字符串是否符合正則表達式的語法。

        2. 提?。哼@個功能就是用來通過正則表達式提取指定字符串中符合要求的文本,如果有符合表達式的內(nèi)容會返回一個或多個。

        3. 替換:這個功能可能用的會少一些,主要是用來將查找到的符合要求的文本,替換成我們指定的字符串。

        4. 拆分:這個功能用的更少了,其實就是用正則表達式對符合要求的文本字串進行分割。

        正則的其他方法

        上次已經(jīng)說了四個比較常用的方法,主要用來做匹配和提取,另外還有一些方法用來做替換和拆分,在這里我們也說一下:

        • sub(str, t, n):這個方法用來替換操作。即將每個匹配到的文本用 str 進行替換,并返回替換后的字符串。當指定了 n 時,則最多替換 n 次。對于 str 可以是組名或者編號來引用捕獲到的內(nèi)容。

        • subn(str, t, n):這個方法和 sub() 方法基本相同,只是這個會返回一個二元組,其中除了包括結(jié)果字串,還有替換的數(shù)量。

        • split(str, n):這個方法是用來拆分字串操作。即將匹配到的文本對字符串進行分割,并返回一個結(jié)果列表。如果正則存在分組,則把分組匹配文本放列表中,并且每兩個分割的中間作為列表的一部分。

        正則匹配對象

        一般正則表達式可以匹配的對象不同,需要調(diào)用不同的方法獲取。

        方法描述說明
        group()返回編號或組名匹配到的內(nèi)容。默認(0)是表示匹配整個表達式內(nèi)容,當然也可以指定多個,則會返回一個元組數(shù)據(jù)。
        groupdict()這個方法會返回一個字典,其中字典的 KEY 是命名的組名,VALUE 為組名對應獲取的內(nèi)容。
        groups()該方法會返回一個包含所有捕獲內(nèi)容的子分組的元組,如果指定了默認值,則這個值就會作為沒有獲取到的內(nèi)容的值。
        lastgroup()該方法用于獲取最后一個匹配到內(nèi)容的組名。
        lastindex()該方法會返回最后一個匹配到內(nèi)容的組編號。
        start()該方法用于指定匹配內(nèi)容子分組是從字串的哪個位置開始匹配的,如果沒有匹配則返回 -1。
        end()該方法用于返回當前匹配對象子分組是從哪個位置匹配結(jié)束的,如果沒有匹配則返回 -1.
        span()該方法會返回一個二元組,內(nèi)容為 (start(), end()) 的返回值。
        pos()該方法用于搜索字符串的開頭起始位置。
        endpos()該方法用于搜索字符串的結(jié)束末尾位置。

        常用正則表達式

        1. 英文和數(shù)字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$

        2. 中文、英文、數(shù)字包括下劃線:^[\u4E00-\u9FA5A-Za-z0-9_]+$

        3. Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

        4. 手機號碼:^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

        5. 身份證號碼:(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)

        6. 空白行:\n\s*\r

        7. 日期格式:^\d{4}-\d{1,2}-\d{1,2}

        8. 復雜密碼:^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$

        9. 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?

        總結(jié)

        好了,今天就算是把 Python 正則表達式相關(guān)的都介紹完了,為了方便大家理解,講的比較基礎(chǔ),但真正用在項目中的時候,可以舉一反三靈活運用。OK,今天就聊這些,如果你喜歡記得點 在看

        PS公號內(nèi)回復「Python」即可進入Python 新手學習交流群,一起 100 天計劃!


        老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點一下如果感覺文章內(nèi)容不錯的話,記得分享朋友圈讓更多的人知道!

        代碼獲取方式

        識別文末二維碼,回復:python

        瀏覽 49
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美女人日b | 欧美性爱豆花在线视频 | 久热最新 | 我要看日逼| 宅男噜噜噜66国产免费观看 | 成年人视频免费看 | 公妇借种hhby刘大壮 | 欧美成人毛片 | 91成人视频无码 | 国产又黄又骚 |