首頁 後端開發 Python教學 Python的re模組正規表示式操作

Python的re模組正規表示式操作

Mar 02, 2017 pm 04:08 PM

這個模組提供了與 Perl 相似l的正規表示式匹配操作。 Unicode字串也同樣適用。

正規表示式使用反斜線" \ "來代表特殊形式或用作轉義字符,這裡跟Python的語法衝突,因此,Python用" \\\\ "表示正規表達式中的" \ ",因為正規表示式中如果要符合" \ ",需要用\來轉義,變成" \\ ",而Python語法中又需要對字串中每一個\進行轉義,所以就變成了" \\\\ "。

上面的寫法是不是覺得很麻煩,為了讓正規表示式具有更好的可讀性,Python特別設計了原始字串(raw string),需要提醒你的是,在寫檔案路徑的時候就不要使用raw string了,這裡有陷阱。 raw string就是用'r'作為字串的前綴,如 r"\n":表示兩個字元"\"和"n",而不是換行符了。 Python中寫正規表示式時建議使用這種形式。

絕大多數正規表示式運算與 模組級函數或RegexObject方法 一樣都能達到相同的目的。而且不需要你一開始就編譯正規表示式對象,但不能使用一些實用的微調參數。

1.正規表示式語法

#為了節省篇幅,這裡不再敘述了。

2.martch和search的區別

#Python提供了兩種不同的原始操作:match和search 。 match是從字串的起點開始做匹配,而search(perl預設)是從字串做任意匹配。

注意:當正規表示式是' ^ '開頭時,match與search是相同的。 match只有當且僅當被匹配的字串開頭就能匹配 或 從pos參數的位置開始就能匹配 時才會成功。如下:

>>> import re
>>> re.match("c", "abcdef")
>>> re .search("c","abcdef")
<_sre.SRE_Match object at 0x00A9A988>
>>> re.match("c", "cabcdef")
<_sre .SRE_Match object at 0x00A9AB80>
>>> re.search("c","cabcdef")
<_sre.SRE_Match object at 0x00AF1720> re.compile("c")
>>> patterm.match("abcdef")
>>> patterm.match("abcdef",1)
>> ;> patterm.match("abcdef",2)
<_sre.SRE_Match object at 0x00A9AB80>

#3.模組內容









#re.compile(pattern, flags=0)

#編譯正規表示式,傳回RegexObject對象,然後可以透過RegexObject物件呼叫match()和search()方法。

prog = re.compile(pattern)
result = prog.match(string)


result = re .match(pattern, string)


是等價的。

第一種方式能實作正規表示式的重複使用。


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



在字串中尋找,是否能符合正規表示式。返回_sre.SRE_Match對象,如果不能匹配返回None。



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


字串的開頭是否能符合正規表示式。返回_sre.SRE_Match對象,如果不能匹配返回None。


re.split(pattern, string, maxsplit=0)############透過正規表示式將字串分開。如果用括號將正規表示式括起來,那麼符合的字串也會被列入到list中傳回。 maxsplit是分離的次數,maxsplit=1分離一次,預設為0,不限制次數。 #########>>> re.split('\W+', 'Words, words, words.') ###['Words', 'words', 'words', ' '] ###>>> re.split('(\W+)', 'Words, words, words.') ###['Words', ', ', 'words', ', ' , 'words', '.', ''] ###>>> re.split('\W+', 'Words, words, words.', 1) ###['Words', ' words, words.'] ###>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)#########注意:我使用的Python是2.6,查看原始碼發現split()並沒有flags的參數,2.7才會增加。這種問題我發現不只一次了,官方的文檔 跟 源碼不一致的現象,如果發現異常,應該去源碼中找找原因。 #########如果在字串的開始或結尾就匹配,則傳回的list將會以空串開始或結尾。 ######

>>> re.split('(\W+)', '...words, words...')
['', '...', 'words', ' , ', 'words', '...', '']

如果字串不能匹配,將會傳回整個字串的list。

>>> re.split("a","bbb")
['bbb']

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

找到RE 相符的所有子字串,並將它們當作清單傳回。這個匹配是從左到右有序地返回。如果無匹配,返回空列表。

>>> re.findall("a","bcdef")
[]

>>> re.findall (r"\d+","12a32bc43jf3")
['12', '32', '43', '3']

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

找到RE 符合的所有子字串,並將它們當作一個迭代器傳回。這個匹配是從左到右有序地返回。如果無匹配,返回空列表。

>>> it = re.finditer(r"\d+","12a32bc43jf3")
>>> for match in it:
print match .group()

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

找到RE 匹配的所有子字串,並將其用一個不同的字串替換。可選參數 count 是模式匹配後替換的最大次數;count 必須是非負整數。預設值是 0 表示替換所有的匹配。如果無匹配,字串將會無改變地返回。

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

與re.sub方法作用一樣,但傳回的是包含新字串和替換執行次數的兩元組。

re.escape(string)

將字串中的非字母數字轉義

re.purge()

清空快取中的正規表示式

4.正規表示式物件




# #re.RegexObject

re.compile()傳回RegexObject物件

#re.MatchObject

##group()傳回被RE 相符的字串


start()傳回符合開始的位置

end()傳回符合結束的位置
span()回傳一個元組包含匹配(開始,結束) 的位置


5.編譯標誌

##編譯標誌讓你可以修改正規表示式的一些運行方式。在 re 模組中標誌可以使用兩個名字,一個是全名如 IGNORECASE,一個是縮寫,一字母形式如 I。 (如果你熟悉 Perl 的模式修改,一字母形式使用相同的字母;例如 re.VERBOSE的縮寫形式是 re.X。)多個標誌可以透過按位 OR-ing 它們來指定。如re.I | re.M 被設定成I 和M 標誌:


I

IGNORECASE

使比對大小寫不敏感;字元類別和字串匹配字母時忽略大小寫。舉個例子,[A-Z]也可以符合小寫字母,Spam 可以符合 "Spam", "spam", 或 "spAM"。這個小寫字母並不考慮當前位置。


L

LOCALE

#"w, "W, "b, 和"B,這取決於目前的本地化設定.

locales 是 C 語言庫中的一項功能,是用來為需要考慮不同語言的程式設計提供幫助的。舉個例子,如果你正在處理法文文本,你想用 "w+ 來匹配文字,但 "w 只匹配字符類 [A-Za-z];它並不能匹配 "é" 或 "?"。如果你的系統配置適當且本地化設定為法語,那麼內部的 C 函數將告訴程式 "é" 也應該被視為一個字母。當在編譯正規表示式時使用 LOCALE 標誌會得到用這些 C 函數來處理 "w 後的編譯物件;這會更慢,但也會像你希望的那樣可以用 "w+ 來匹配法文文本。


M

MULTILINE

#(此時^ 和$ 不會被解釋; 它們將在4.1 節被介紹.)

使用"^" 只符合字串的開始,而$ 則只符合字串的結尾和直接在換行前(如果有的話)的字串結尾。當本標誌指定後, "^" 符合字串的開始和字串中每行的開始。同樣的, $ 元字元匹配字串結尾和字串中每行的結尾(直接在每個換行之前)。


S

DOTALL

使"." 特殊字元完全符合任何字符,包括換行;沒有這個標誌, "."匹配除了換行外的任何字元。

#########X ###VERBOSE#########

该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。当该标志被指定时,在 RE 字符串中的空白符被忽略,除非该空白符在字符类中或在反斜杠之後;这可以让你更清晰地组织和缩进 RE。它也可以允许你将注释写入 RE,这些注释会被引擎忽略;注释用 "#"号 来标识,不过该符号不能在字符串或反斜杠之後。

最后:如果能用字符串的方法,就不要选择正则表达式,因为字符串方法更简单快速。

更多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脫衣器

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)

熱門話題

Java教學
1656
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1229
24
Python vs.C:申請和用例 Python vs.C:申請和用例 Apr 12, 2025 am 12:01 AM

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

您可以在2小時內學到多少python? 您可以在2小時內學到多少python? Apr 09, 2025 pm 04:33 PM

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

2小時的Python計劃:一種現實的方法 2小時的Python計劃:一種現實的方法 Apr 11, 2025 am 12:04 AM

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

Python:遊戲,Guis等 Python:遊戲,Guis等 Apr 13, 2025 am 12:14 AM

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

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

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

Python和時間:充分利用您的學習時間 Python和時間:充分利用您的學習時間 Apr 14, 2025 am 12:02 AM

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

Python:探索其主要應用程序 Python:探索其主要應用程序 Apr 10, 2025 am 09:41 AM

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

Python:自動化,腳本和任務管理 Python:自動化,腳本和任務管理 Apr 16, 2025 am 12:14 AM

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

See all articles