首頁 後端開發 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. (?<=e) 正評論
  9. (?<=e) 正評論
     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

熱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

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

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

vs code 可以在 Windows 8 中運行嗎 vs code 可以在 Windows 8 中運行嗎 Apr 15, 2025 pm 07:24 PM

VS Code可以在Windows 8上運行,但體驗可能不佳。首先確保系統已更新到最新補丁,然後下載與系統架構匹配的VS Code安裝包,按照提示安裝。安裝後,注意某些擴展程序可能與Windows 8不兼容,需要尋找替代擴展或在虛擬機中使用更新的Windows系統。安裝必要的擴展,檢查是否正常工作。儘管VS Code在Windows 8上可行,但建議升級到更新的Windows系統以獲得更好的開發體驗和安全保障。

visual studio code 可以用於 python 嗎 visual studio code 可以用於 python 嗎 Apr 15, 2025 pm 08:18 PM

VS Code 可用於編寫 Python,並提供許多功能,使其成為開發 Python 應用程序的理想工具。它允許用戶:安裝 Python 擴展,以獲得代碼補全、語法高亮和調試等功能。使用調試器逐步跟踪代碼,查找和修復錯誤。集成 Git,進行版本控制。使用代碼格式化工具,保持代碼一致性。使用 Linting 工具,提前發現潛在問題。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

vscode 擴展是否是惡意的 vscode 擴展是否是惡意的 Apr 15, 2025 pm 07:57 PM

VS Code 擴展存在惡意風險,例如隱藏惡意代碼、利用漏洞、偽裝成合法擴展。識別惡意擴展的方法包括:檢查發布者、閱讀評論、檢查代碼、謹慎安裝。安全措施還包括:安全意識、良好習慣、定期更新和殺毒軟件。

See all articles