搜尋
首頁後端開發Python教學Python中正規表示式的知識總結分享

Python中正規表示式的知識總結分享

Sep 23, 2017 am 11:34 AM
python匯總表達式

本文介紹了Python正規表示式的相關基礎知識,本文的內容不包括如何撰寫高效的正規表示式、如何最佳化正規表示式,這些主題請查看其他教學課程。

1. 正規表示式語法

  1.1 字元與字元類別
     1 特殊字元:\.^$?+*{}[]()|
      以上特殊字元要想使用字面值,必須使用\進行轉義
     2 字元類別
      時如果沒有指定量詞則只會符合其中的一個。
       2. 字元類別內可以指定範圍,例如[a-zA-Z0-9]表示a到z,A到Z,0到9之間的任何一個字元
     3  3  3.一個^,表示否定一個字元類,例如[^0-9]表示可以匹配一個任意非數字的字元。
       4. 字元類別內部,除了\之外,其他特殊字元不再具備特殊意義,都表示字面值。 ^放在第一個位置表示否定,放在其他位置表示^本身,-放在中間表示範圍,放在字符類中的第一個字符,則表示-本身。

      5. 字符類內部可以使用速記法,例如\d \s \w
    3 速記法
       3 速記法
     , 3 速記法
    行符,則符合任意字元包括換行
       \d 符合一個Unicode數字,如果帶re.ASCII,則符合0-9
      \D 符合空白.ASCII,則匹配\t\n\r\f\v中的一個
       \S 匹配Unicode非空白
        \S 匹配Unicode非空白

       \w 匹配單詞字符,如果帶有匹配單詞字符,如果帶有單詞字符,如果單詞匹配單詞-Z0-9_]中的一個

       \W 匹配Unicode非單子字元

  1.2 量詞
     1. 匹配前面的字元字元0次或多次
     3. + 匹配前面的字元1次或多次
     4. {m} 匹配前面表達式m次
    4. {m} 匹配前面表達式m次
    式 比 5. {mm5.次
     6. {,n} 匹配前面的正則表達式最多n次
     7. {m,n} 匹配前面的正則表達式至少n次,最多表達式

  #       以上量詞都是貪婪模式,會盡可能多的匹配,如果要改為非貪婪模式,透過在量詞後面跟隨一個?來實現


  1.3 組與捕獲
    1  :
       1. 捕獲()中正則表達式的內容以備進一步利用處理,可以透過在左括號後面跟隨?:來關閉這個括號的捕獲功能
      內容 2.組合,以便使用量詞或|
    2 反響引用前面()內捕獲的內容:
       1. 透過組號反向引用
      1. 透過組號反向引用
      1. 透過組號反向引用
         從1開始,由左到右遞增,可以透過\i引用前面()內表達式捕獲的內容
       2. 透過組名反向引用前面小號內捕獲的內容

    可以透過在前面小 後面跟隨?P,尖括號中放入組名來為一個組起一個別名,後面透過(?P=name)來引用前面捕獲的內容。如(? P\w+)\s+(?P=word)來匹配重複的單字。 ###     3 注意點:###       反向引用不能放在字元類別[]中使用。 ###

   1.4 斷言與標記
     斷言不會匹配任何文本,只是對斷言所在的文本施加某些約束
     1 常用單字斷言:
       1 常用字詞:
     []中則表示backspace
      2. \B 匹配非單字邊界,受ASCII標記影響
       3. \A 在起始處匹配
     3. \A 在起始處匹配
     3。 ,則在每個換行符後匹配
       5. \Z 在結尾處匹配
       6. $ 在結束時匹配
       6。 ?=e) 正前瞻
       8. (?!e) 負前瞻
       9. (?  9. (?     2前瞻回顧的解釋
       前瞻:exp1(?=exp2) exp1後面的內容要符合exp2
     負前瞻 1(!expexp    ; =exp2)exp1 exp1前面的內容要符合exp2
      負後顧: (?  負後顧: (?  負後顧: (?  一     前則必須查找表達式可以這樣寫:"(hello)\s+(?=world)",用來匹配"hello wangxing"和"hello world"只能匹配到後者的hello

  1.5 條件匹配
     (?(id)yes_exp|no_exp):對應id的子表達式如果匹配到內容,則這裡匹配yes_exp,否則匹配no_exp

  1.6 正則表達式的標誌
   式正則表達式的標誌##   式正則表達式。的標誌有兩種使用方法
       1. 透過給予compile方法傳入標誌參數,多個標誌使用|分割的方法,如re.compile(r"#[\da-f]{6}\b" , re.IGNORECASE|re.MULTILINE)
      2. 透過在正規表示式前面加上(?標誌)的方法為正規表示式加上標誌,如(?ms)#[\da-z]{6}\ b
    2. 常用的標誌
       re.A或re.ASCII, 使\b \B \s \S \w \Wd \D都假定為假設為ASC .I或re.IGNORECASE 使正規表示式忽略大小寫
       re.M或re.MULTILINE 多行匹配,使每個^在每個回車後,每個$在每個回車前匹配
       re.S或re.DOTALL 使.能匹配任意字符,包括回車
       re.X或者re.VERBOSE 這樣可以在正則表達式跨越多行,也可以添加註釋\ [ ]來表示,因為預設的空白不再解釋。如:
         re.compile(r"""
          < >]*? #不是src的屬性
           src= #src屬性的開始
           (?:
          (?P[^\1>]+?) #圖片名字
           ( ?P=quote) #右括號
           """,re.VERBOSE|re.IGNORECASE)

2. Python正則表達式模塊

   2.1 正規表示式處理字串主要有四大功能

     1. 匹配查看一個字串是否符合正規表示式的語法,一般傳回式來擷取字串中符合要求的文字
     3. 取代尋找字串中符合正規表示式的文本,並以對應的字串取代
     4. 分割使用正規表示式。

##   2.2 Python中re模組使用正規表示式的兩種方法


     1. 使用re.compile(r, f)方法產生正規表示式對象,然後呼叫正規表示式物件對應的方法。不同的是傳入的第一個參數是正規表示式字串。

     1. rx.findall(s,start, end):
      傳回一個列表,如果正規表示式中沒有分組,則列表包含的是所有符合的內容,## 〠 〠                   無無正則則則有則為正則中則未則為正則中則是 我們則中則所包含在正則表達式有分組,則清單中的每個元素是一個元組,元組中包含子分組中匹配到的內容,但是沒有傳回整個正則表達式匹配的內容
     2. rx.finditer(s, start, end):
      返回一個可迭代對象
       對可迭代對象進行迭代,每一次返回一個匹配對象,可以調用匹配對象的group()方法查看指定組匹配到的內容,0表示整個正則表達式符合到的內容
     3. rx.search(s, start, end):
      返回一個匹配對象,倘若沒匹配到,就返回N   返回一個匹配對象,倘若沒匹配到,就返回N繼續往後匹配
     4. rx.match(s, start, end):
      如果正則表達式在字符串的起始處匹配,就返回一個匹配對象,否則返回Nf#       rx.sub(x, s, m):
      回傳一個字串。每一個符合的地方用x替換,傳回替換後的字串,如果指定m,則最多替換m次。對於x可以使用/i或/gid可以是群組名稱或編號來引用捕獲到的內容。
       模組方法re.sub(r, x, s, m)中的x可以使用一個函數。此時我們就可以對捕獲到的內容推過這個函數進行處理後再替換匹配到的文字。
     6. rx.subn(x, s, m):
      與re.sub()方法相同,差別在於返回的是二元組,其中一項是結果字串,一項是做替換的個數。
     7. rx.split(s, m):分割字串
       傳回一個列表
    存在分組,則將分組配對到的內容放在清單中每兩個分割的中間作為清單的一部分,如:
       rx = re.compile(r"(\d)[a-z]+(\d)")
      s = "ab12dk3klj8jk9jks5"
      result = rx.split(s)
    result = rx.split(s)
  ,      3' 5' ]
    8. rx.flags():正規表示式編譯時設定的標誌
     9. rx.pattern():正規表示式編譯時所使用的字串#  2.符合物件的屬性與方法


    01. m.group(g, ...)
      傳回編號或群組名稱相符到的內容,預設或0表示整個表達式符合到的內容,如果指定多個,就回傳一個元組

     02. m.groupdict(default)

      回傳一個字典。字典的鍵是所有命名的組的組名,值為命名組捕獲到的內容
       如果有default參數,則將其作為那些沒有參與匹配的組的預設值。

     03. m.groups(default)

      回傳一個元群組。包含所有捕獲到內容的子分組,從1開始,如果指定了default值,則這個值作為那些沒有捕獲到內容的組的值
     04. m.lastgroup()
         最高的捕獲組的名稱,如果沒有或沒有使用名稱則傳回None(不常用)
    05. m.lastindex()
      匹配到內容的編號最高的捕獲組的編號,如果沒有就返回N 。
     06. m.start(g):
      當前匹配對象的子分組是從字符串的那個位置開始匹配的,如果當前組沒有參與匹配就返回-1
[F  7. (g)
      當前匹配物件的子分組是從字串的那個位置匹配結束的,如果當前組沒有參與匹配就返回-1
    08. m.span()##     08. m.span()##     08. m.span()##     08.組,內容分別是m.start(g)和m.end(g)的回傳值
     09. m.re()
         式
      . string()
      傳遞給match或search用於匹配的字串
     11. m.pos()
      搜尋的起始位置。即字串的開頭,或start指定的位置(不常用)
    12. m.endpos()
      搜尋的結束位置。即字串的結尾位置,或end指定的位置(不常用)


  2.5 總結

#

     1. 對於正規表示式的匹配功能,Python沒有傳回true和false的方法,但可以透過對match或search方法的回傳值是否為None來判斷
     2. 對於正規表示式的搜尋功能,如果只搜尋一次可以使用search或match方法傳回的符合物件得到,對於搜尋多次可以使用finditer方法傳回的可迭代物件來迭代存取
     3. 對於正規表示式的取代功能,可以使用正規表示式物件的sub或subn方法來實現,也可以透過re模組方法sub或subn來實現,差異在於模組的sub方法的替換文字可以使用一個函數來產生
     4. 對於正規表示式的分割功能,可以使用正規表示式物件的split方法,需要注意如果正規表示式物件有分組的話,分組捕獲的內容也會放到傳回的清單中

以上是Python中正規表示式的知識總結分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Python vs. C:了解關鍵差異Python vs. C:了解關鍵差異Apr 21, 2025 am 12:18 AM

Python和C 各有優勢,選擇應基於項目需求。 1)Python適合快速開發和數據處理,因其簡潔語法和動態類型。 2)C 適用於高性能和系統編程,因其靜態類型和手動內存管理。

Python vs.C:您的項目選擇哪種語言?Python vs.C:您的項目選擇哪種語言?Apr 21, 2025 am 12:17 AM

選擇Python還是C 取決於項目需求:1)如果需要快速開發、數據處理和原型設計,選擇Python;2)如果需要高性能、低延遲和接近硬件的控制,選擇C 。

達到python目標:每天2小時的力量達到python目標:每天2小時的力量Apr 20, 2025 am 12:21 AM

通過每天投入2小時的Python學習,可以有效提升編程技能。 1.學習新知識:閱讀文檔或觀看教程。 2.實踐:編寫代碼和完成練習。 3.複習:鞏固所學內容。 4.項目實踐:應用所學於實際項目中。這樣的結構化學習計劃能幫助你係統掌握Python並實現職業目標。

最大化2小時:有效的Python學習策略最大化2小時:有效的Python學習策略Apr 20, 2025 am 12:20 AM

在兩小時內高效學習Python的方法包括:1.回顧基礎知識,確保熟悉Python的安裝和基本語法;2.理解Python的核心概念,如變量、列表、函數等;3.通過使用示例掌握基本和高級用法;4.學習常見錯誤與調試技巧;5.應用性能優化與最佳實踐,如使用列表推導式和遵循PEP8風格指南。

在Python和C之間進行選擇:適合您的語言在Python和C之間進行選擇:適合您的語言Apr 20, 2025 am 12:20 AM

Python適合初學者和數據科學,C 適用於系統編程和遊戲開發。 1.Python簡潔易用,適用於數據科學和Web開發。 2.C 提供高性能和控制力,適用於遊戲開發和系統編程。選擇應基於項目需求和個人興趣。

Python與C:編程語言的比較分析Python與C:編程語言的比較分析Apr 20, 2025 am 12:14 AM

Python更適合數據科學和快速開發,C 更適合高性能和系統編程。 1.Python語法簡潔,易於學習,適用於數據處理和科學計算。 2.C 語法複雜,但性能優越,常用於遊戲開發和系統編程。

每天2小時:Python學習的潛力每天2小時:Python學習的潛力Apr 20, 2025 am 12:14 AM

每天投入兩小時學習Python是可行的。 1.學習新知識:用一小時學習新概念,如列表和字典。 2.實踐和練習:用一小時進行編程練習,如編寫小程序。通過合理規劃和堅持不懈,你可以在短時間內掌握Python的核心概念。

Python與C:學習曲線和易用性Python與C:學習曲線和易用性Apr 19, 2025 am 12:20 AM

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),