第二篇詳細Python正則表達式操作指南(re使用)
06-26
第二篇詳細Python正則表達式操作指南(re使用)
group() 返回 RE 匹配的子串。start() 和 end() 返回匹配開始和結束時的索引。span() 則用單個元組把開始和結束時的索引一起返回。因為匹配方法檢查到如果 RE 在字元串開始處開始匹配,那麼 start() 將總是為零。然而, `RegexObject` 實例的 search 方法掃描下面的字元串的話,在這種情況下,匹配開始的位置就也許不是零了。
在上面的例子里,Python 的字元串自動連接可以用來將 RE 分成更小的部分,但它比用 re.VERBOSE 標誌時更難懂。更多模式功能到目前為止,我們只展示了正則表達式的一部分功能。在本節,我們將展示一些新的元字元和如何使用組來檢索被匹配的文本部分。更多的元字元還有一些我們還沒展示的元字元,其中的大部分將在下一章節展示。
推薦閱讀:
來自專欄 Python大神進階之路
接下來昨天的內容







findall() 在它返回結果時不得不創建一個列表。在 Python 2.2中,也可以用 finditer() 方法。


Under the hood, 這些函數簡單地產生一個 RegexOject 並在其上調用相應的方法。它們也在緩存里保存編譯後的對象,因此在將來調用用到相同 RE 時就會更快。
你將使用這些模塊級函數,還是先得到一個 `RegexObject` 再調用它的方法呢?如何選擇依賴於怎樣用 RE 更有效率以及你個人編碼風格。如果一個 RE 在代碼中只做用一次的話,那麼模塊級函數也許更方便。如果程序包含很多的正則表達式,或在多處復用同一個的話,那麼將全部定義放在一起,在一段代碼中提前編譯所有的 REs 更有用。從標準庫中看一個例子,這是從 xmllib.py 文件中提取出來的: 我通常更喜歡使用編譯對象,甚至它只用一次,but few people will be as much of a purist about this as I am。編譯標誌
的模式修改,一字母形式使用同樣的字母;例如 re.VERBOSE的縮寫形式是 re.X。)多個標誌可以通過按位 OR-ing 它們來指定。如
re.I | re.M 被設置成 I 和 M 標誌:這有個可用標誌表,對每個標誌後面都有詳細的說明。
locales
是 C 語言庫中的一項功能,是用來為需要考慮不同語言的編程提供幫助的。舉個例子,如果你正在處理法文文本,你想用 "w+ 來匹配文字,但 "w 只匹配字元類 [A-Za-z];它並不能匹配 "é" 或 "?"。如果你的系統配置適當且本地化設置為法語,那麼內部的 C 函數將告訴程序 "é" 也應該被認為是一個字母。當在編譯正則表達式時使用 LOCALE 標誌會得到用這些 C 函數來處理 "w 後的編譯對象;這會更慢,但也會象你希望的那樣可以用 "w+ 來匹配法文文本。MMULTILINE (此時 ^ 和 $ 不會被解釋; 它們將在 4.1 節被介紹.)使用 "^" 只匹配字元串的開始,而 $ 則只匹配字元串的結尾和直接在換行前(如果有的話)的字元串結尾。當本標誌指定後, "^" 匹配字元串的開始和字元串中每行的開始。同樣的, $ 元字元匹配字元串結尾和字元串中每行的結尾(直接在每個換行之前)。SDOTALL
使 "." 特殊字元完全匹配任何字元,包括換行;沒有這個標誌, "." 匹配除了換行外的任何字元。XVERBOSE 該標誌通過給予你更靈活的格式以便你將正則表達式寫得更易於理解。當該標誌被指定時,在 RE 字元串中的空白符被忽略,除非該空白符在字元類中或在反斜杠之後;這可以讓你更清晰地組織和縮進 RE。它也可以允許你將注釋寫入 RE,這些注釋會被引擎忽略;注釋用 "#"號 來標識,不過該符號不能在字元串或反斜杠之後。舉個例子,這裡有一個使用 re.VERBOSE 的 RE;看看讀它輕鬆了多少?

推薦閱讀:
※世上最奇葩的6種編程語言,你知道幾種?
※乾貨 | 全面深入理解 Python 面向對象
※理論上最好的編程語言: 起點動機篇
※寫了那麼久代碼了,給大家談談我怎麼理解編程
※html5可以做什麼?HTML5市場需求有哪些?


