目錄
1. 常用方法
2. 特殊匹配符
3. 模組方法
re.match(pattern, string, flags=0)
search(pattern, string, flags=0)
sub(pattern, repl, string, count=0, flags=0)
subn(pattern, repl, string, count=0, flags=0)
split(pattern, string, maxsplit=0, flags=0)
findall(pattern, string, flags=0)
4. Match對象
5.Pattern物件
6.匹配模式
首頁 後端開發 Python教學 Python標準庫學習re模組的詳細介紹

Python標準庫學習re模組的詳細介紹

Mar 21, 2017 am 09:15 AM

  re模組提供了一系列功能強大的正規表示式(regular expression)工具,它們允許你快速檢查給定字串是否與給定的模式匹配( match函數), 或包含這個模式(search函數)。正規表示式是以緊湊(也很神秘)的語法寫出的字串模式。

1. 常用方法

##match (pattern, 如果字串string的開頭和正規表示式pattern符合傳回對應的Matchsearch(pattern, string, flags=0)#掃描string,如果有個位置可以符合正規表示式pattern,就傳回一個MatchObject的實例,否則返回Nonesub(pattern, repl, string, 將string裡配對pattern的部分,用repl替換掉,最多替換count次subn(pattern, repl, string, count=0, flags=0)和sub類似,subn回傳的是一個替換後的字串和匹配次
常用方法 #描述
string, flags=0) Object的實例,否則傳回None
count=0, flags=0)
數組成的元組
split(pattern, string, maxsplit=0, flags=0) 用pattern匹配到的字串來分割string
findall(pattern, string, flags=0) 以清單的形式傳回string裡符合pattern的字串
compile( pattern, flags=0)compile(pattern, flags=0) 把一個正規表示式pattern編譯成正規物件,以便可以用正規物件的match和search方法
purge() Clear the regular expression cache
escape(string ) 把string中除了字母和數字以外的字符,都加上反斜桿

2. 特殊匹配符

##匹配前一個字元1次或多次?匹配前一個字元0次或一次
語法 說明
. 匹配除了換行符號外的任何字元
^ 頭匹配
$ 尾匹配
* 匹配前一個字元0次或多次
+
######### #{m,n} 符合前一個字元m至n次
\ 對任一特殊字元進行轉義
#[] 用來表示一個字元集
| #或,代表左右任意匹配一個

3. 模組方法

re.match(pattern, string, flags=0)

  從字串的開始匹配,如果pattern匹配到就返回一個Match物件實例(Match物件在後面描述),否則放回None。 flags為匹配模式(會在下面描述),用來控制正規表示式的匹配方式。

import re

a = &#39;abcdefg&#39;print re.match(r&#39;abc&#39;, a)  # 匹配成功print re.match(r&#39;abc&#39;, a).group()print re.match(r&#39;cde&#39;, a)  # 匹配失败>>><_sre.SRE_Match object at 0x0000000001D94578>
>>>abc
>>>None
登入後複製

search(pattern, string, flags=0)

  用於尋找字串中可以符合成功的子字串,如果找到就傳回一個Match物件實例,否則傳回None。

import re

a = &#39;abcdefg&#39;print re.search(r&#39;bc&#39;, a)print re.search(r&#39;bc&#39;, a).group()print re.search(r&#39;123&#39;, a)

>>><_sre.SRE_Match object at 0x0000000001D94578>
>>>bc
>>>None
登入後複製

sub(pattern, repl, string, count=0, flags=0)

  替換,將string裡匹配pattern的部分,用repl替換掉,最多替換count次(剩餘的匹配將不做處理),然後傳回替換後的字串。

import re

a = &#39;a1b2c3&#39;print re.sub(r&#39;\d+&#39;, &#39;0&#39;, a)  # 将数字替换成&#39;0&#39;print re.sub(r&#39;\s+&#39;, &#39;0&#39;, a)  # 将空白字符替换成&#39;0&#39;>>>a0b0c0
>>>a1b2c3
登入後複製

subn(pattern, repl, string, count=0, flags=0)

  跟sub()函數一樣,只是它回傳的是一個元組,包含新字串和配對到的次數

import re

a = &#39;a1b2c3&#39;print re.subn(r&#39;\d+&#39;, &#39;0&#39;, a)  # 将数字替换成&#39;0&#39;>>>(&#39;a0b0c0&#39;, 3)
登入後複製

split(pattern, string, maxsplit=0, flags=0)

  正規版的split(),用符合pattern的子字串來分割string,如果pattern裡面使用了圓括號,那麼被pattern符合的字串也會作為傳回值清單的一部分,maxsplit為最多被分割的字串。

import re

a = &#39;a1b1c&#39;print re.split(r&#39;\d&#39;, a)print re.split(r&#39;(\d)&#39;, a)

>>>[&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]
>>>[&#39;a&#39;, &#39;1&#39;, &#39;b&#39;, &#39;1&#39;, &#39;c&#39;]
登入後複製

findall(pattern, string, flags=0)

#  以列表的形式傳回string裡符合pattern的不重疊的子字串。

import re

a = &#39;a1b2c3d4&#39;print re.findall(&#39;\d&#39;, a)

>>>[&#39;1&#39;, &#39;2&#39;, &#39;3&#39;, &#39;4&#39;]
登入後複製

4. Match對象

  re.match()、re.search()成功匹配的話都會返回一個Match對象,它包含了很多此次匹配的信息,可以使用Match提供的屬性或方法來取得這些資訊。例如:

>>>import re

>>>str = &#39;he has 2 books and 1 pen&#39;
>>>ob = re.search(&#39;(\d+)&#39;, str)

>>>print ob.string  # 匹配时使用的文本
he has 2 books and 1 pen

>>>print ob.re # 匹配时使用的Pattern对象
re.compile(r&#39;(\d+)&#39;)

>>>print ob.group()  # 获得一个或多个分组截获的字符串
2

>>>print ob.groups()  # 以元组形式返回全部分组截获的字符串
(&#39;2&#39;,)
登入後複製

5.Pattern物件

  Pattern物件物件由re.compile()傳回,它帶有許多re模組的同名方法,而且方法作用類似一樣的。例如:

>>>import re
>>>pa = re.compile(&#39;(d\+)&#39;)

>>>print pa.split(&#39;he has 2 books and 1 pen&#39;)
[&#39;he has &#39;, &#39;2&#39;, &#39; books and &#39;, &#39;1&#39;, &#39; pen&#39;]

>>>print pa.findall(&#39;he has 2 books and 1 pen&#39;)
[&#39;2&#39;, &#39;1&#39;]

>>>print pa.sub(&#39;much&#39;, &#39;he has 2 books and 1 pen&#39;)
he has much books and much pen
登入後複製

6.匹配模式

  匹配模式取值可以使用位元或運算子'|'表示同時生效,例如re.I | re. M, 下面是常見的一些flag。

  • re.I(re.IGNORECASE): 忽略大小寫

#
>>>pa = re.compile(&#39;abc&#39;, re.I)
>>>pa.findall(&#39;AbCdEfG&#39;)
>>>[&#39;AbC&#39;]
登入後複製
  • re.L(re.LOCALE ):字元集本地化

  這個功能是為了支援多語言版本的字元集使用環境的,例如在轉義符\w,在英文環境下,它代表[a-zA-Z0-9],即所以英文字元和數字。如果在一個法語環境下使用,有些法語字串便匹配不上。加上這L選項和就可以配對了。不過這個對於中文環境似乎沒有什麼用,它仍然不能匹配中文字元。

  • re.M(re.MULTILINE): 多行模式,改變'^'與'$'的行為

>>>pa = re.compile(&#39;^\d+&#39;)
>>>pa.findall(&#39;123 456\n789 012\n345 678&#39;)
>>>[&#39;123&#39;]

>>>pa_m = re.compile(&#39;^\d+&#39;, re.M)
>>>pa_m.findall(&#39;123 456\n789 012\n345 678&#39;)
>>>[&#39;123&#39;, &#39;789&#39;, &#39;345&#39;]
登入後複製
  • re.S(re.DOTALL): 點任意配對模式,改變'.'的行為

  .号将匹配所有的字符。缺省情况下.匹配除换行符\n外的所有字符,使用这一选项以后,点号就能匹配包括换行符的任何字符。

  • re.U(re.UNICODE): 根据Unicode字符集解析字符

  • re.X(re.VERBOSE): 详细模式

# 这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。以下两个正则表达式是等价的a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")# 但是在这个模式下,如果你想匹配一个空格,你必须用&#39;/ &#39;的形式(&#39;/&#39;后面跟一个空格)
登入後複製


以上是Python標準庫學習re模組的詳細介紹的詳細內容。更多資訊請關注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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

如何解決Linux終端中查看Python版本時遇到的權限問題? 如何解決Linux終端中查看Python版本時遇到的權限問題? Apr 01, 2025 pm 05:09 PM

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? 如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? Apr 02, 2025 am 07:18 AM

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? 在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? 如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

什麼是正則表達式? 什麼是正則表達式? Mar 20, 2025 pm 06:25 PM

正則表達式是在編程中進行模式匹配和文本操作的強大工具,從而提高了各種應用程序的文本處理效率。

Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

哪些流行的Python庫及其用途? 哪些流行的Python庫及其用途? Mar 21, 2025 pm 06:46 PM

本文討論了諸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和請求等流行的Python庫,並詳細介紹了它們在科學計算,數據分析,可視化,機器學習,網絡開發和H中的用途

Python中如何通過字符串動態創建對象並調用其方法? Python中如何通過字符串動態創建對象並調用其方法? Apr 01, 2025 pm 11:18 PM

在Python中,如何通過字符串動態創建對象並調用其方法?這是一個常見的編程需求,尤其在需要根據配置或運行...

See all articles