re模組提供了一系列功能強大的正規表示式(regular expression)工具,它們允許你快速檢查給定字串是否與給定的模式匹配( match函數), 或包含這個模式(search函數)。正規表示式是以緊湊(也很神秘)的語法寫出的字串模式。
1. 常用方法
常用方法 | #描述 |
---|---|
string, flags=0) | 如果字串string的開頭和正規表示式pattern符合傳回對應的MatchObject的實例,否則傳回None |
#掃描string,如果有個位置可以符合正規表示式pattern,就傳回一個MatchObject的實例,否則返回None | |
count=0, flags=0) | 將string裡配對pattern的部分,用repl替換掉,最多替換count次|
和sub類似,subn回傳的是一個替換後的字串和匹配次 | 數組成的元組 |
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. 特殊匹配符
語法 | 說明 |
---|---|
. | 匹配除了換行符號外的任何字元 |
^ | 頭匹配 |
$ | 尾匹配 |
* | 匹配前一個字元0次或多次 |
+ | |
? | |
######### #{m,n} | 符合前一個字元m至n次 |
\ | 對任一特殊字元進行轉義 |
#[] | 用來表示一個字元集合 |
| | #或,代表左右任意匹配一個 |
3. 模組方法
re.match(pattern, string, flags=0)
從字串的開始匹配,如果pattern匹配到就返回一個Match物件實例(Match物件在後面描述),否則放回None。 flags為匹配模式(會在下面描述),用來控制正規表示式的匹配方式。
import re a = 'abcdefg'print re.match(r'abc', a) # 匹配成功print re.match(r'abc', a).group()print re.match(r'cde', a) # 匹配失败>>><_sre.SRE_Match object at 0x0000000001D94578> >>>abc >>>None
search(pattern, string, flags=0)
用於尋找字串中可以符合成功的子字串,如果找到就傳回一個Match物件實例,否則傳回None。
import re a = 'abcdefg'print re.search(r'bc', a)print re.search(r'bc', a).group()print re.search(r'123', a) >>><_sre.SRE_Match object at 0x0000000001D94578> >>>bc >>>None
sub(pattern, repl, string, count=0, flags=0)
替換,將string裡匹配pattern的部分,用repl替換掉,最多替換count次(剩餘的匹配將不做處理),然後傳回替換後的字串。
import re a = 'a1b2c3'print re.sub(r'\d+', '0', a) # 将数字替换成'0'print re.sub(r'\s+', '0', a) # 将空白字符替换成'0'>>>a0b0c0 >>>a1b2c3
subn(pattern, repl, string, count=0, flags=0)
跟sub()函數一樣,只是它回傳的是一個元組,包含新字串和配對到的次數
import re a = 'a1b2c3'print re.subn(r'\d+', '0', a) # 将数字替换成'0'>>>('a0b0c0', 3)
split(pattern, string, maxsplit=0, flags=0)
正規版的split(),用符合pattern的子字串來分割string,如果pattern裡面使用了圓括號,那麼被pattern符合的字串也會作為傳回值清單的一部分,maxsplit為最多被分割的字串。
import re a = 'a1b1c'print re.split(r'\d', a)print re.split(r'(\d)', a) >>>['a', 'b', 'c'] >>>['a', '1', 'b', '1', 'c']
findall(pattern, string, flags=0)
# 以列表的形式傳回string裡符合pattern的不重疊的子字串。
import re a = 'a1b2c3d4'print re.findall('\d', a) >>>['1', '2', '3', '4']
4. Match對象
re.match()、re.search()成功匹配的話都會返回一個Match對象,它包含了很多此次匹配的信息,可以使用Match提供的屬性或方法來取得這些資訊。例如:
>>>import re >>>str = 'he has 2 books and 1 pen' >>>ob = re.search('(\d+)', str) >>>print ob.string # 匹配时使用的文本 he has 2 books and 1 pen >>>print ob.re # 匹配时使用的Pattern对象 re.compile(r'(\d+)') >>>print ob.group() # 获得一个或多个分组截获的字符串 2 >>>print ob.groups() # 以元组形式返回全部分组截获的字符串 ('2',)
5.Pattern物件
Pattern物件物件由re.compile()傳回,它帶有許多re模組的同名方法,而且方法作用類似一樣的。例如:
>>>import re >>>pa = re.compile('(d\+)') >>>print pa.split('he has 2 books and 1 pen') ['he has ', '2', ' books and ', '1', ' pen'] >>>print pa.findall('he has 2 books and 1 pen') ['2', '1'] >>>print pa.sub('much', 'he has 2 books and 1 pen') he has much books and much pen
6.匹配模式
匹配模式取值可以使用位元或運算子'|'表示同時生效,例如re.I | re. M, 下面是常見的一些flag。
re.I(re.IGNORECASE): 忽略大小寫
>>>pa = re.compile('abc', re.I) >>>pa.findall('AbCdEfG') >>>['AbC']
re.L(re.LOCALE ):字元集本地化
這個功能是為了支援多語言版本的字元集使用環境的,例如在轉義符\w
,在英文環境下,它代表[a-zA-Z0-9]
,即所以英文字元和數字。如果在一個法語環境下使用,有些法語字串便匹配不上。加上這L選項和就可以配對了。不過這個對於中文環境似乎沒有什麼用,它仍然不能匹配中文字元。
re.M(re.MULTILINE): 多行模式,改變'^'與'$'的行為
>>>pa = re.compile('^\d+') >>>pa.findall('123 456\n789 012\n345 678') >>>['123'] >>>pa_m = re.compile('^\d+', re.M) >>>pa_m.findall('123 456\n789 012\n345 678') >>>['123', '789', '345']
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*")# 但是在这个模式下,如果你想匹配一个空格,你必须用'/ '的形式('/'后面跟一个空格)
以上是Python標準庫學習re模組的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Linux新版
SublimeText3 Linux最新版

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中