編譯標誌

編譯標誌讓你能夠修改正則表達式的一些運行方式。在 re 模塊中標誌可使用兩個名字,一個是全名如 IGNORECASE,一個是縮寫,一字母形式如 I。(若是你熟悉 Perl 的模式修改,一字母形式使用一樣的字母;例如 re.VERBOSE的縮寫形式是 re.X。)多個標誌能夠經過按位 OR-ing 它們來指定。如 re.I | re.M 被設置成 I 和 M 標誌:python

這有個可用標誌表,對每一個標誌後面都有詳細的說明。正則表達式

標誌 含義
DOTALL, S 使 . 匹配包括換行在內的全部字符
IGNORECASE, I 使匹配對大小寫不敏感
LOCALE, L 作本地化識別(locale-aware)匹配
MULTILINE, M 多行匹配,影響 ^ 和 $
VERBOSE, X 可以使用 REs 的 verbose 狀態,使之被組織得更清晰易懂

I IGNORECASE編程

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

L LOCALEspa

影響 \w, \W, \b, 和 \B,這取決於當前的本地化設置。code

locales 是 C 語言庫中的一項功能,是用來爲須要考慮不一樣語言的編程提供幫助的。舉個例子,若是你正在處理法文文本,你想用 \w+ 來匹配文字,但 \w 只匹配字符類 [A-Za-z];它並不能匹配 "é" 或 "ç"。若是你的系統配置適當且本地化設置爲法語,那麼內部的 C 函數將告訴程序 "é" 也應該被認爲是一個字母。當在編譯正則表達式時使用 LOCALE 標誌會獲得用這些 C 函數來處理 \w 後的編譯對象;這會更慢,但也會象你但願的那樣能夠用 \w+ 來匹配法文文本。orm

M MULTILINE對象

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

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

S DOTALL

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

X VERBOSE

該標誌經過給予你更靈活的格式以便你將正則表達式寫得更易於理解。當該標誌被指定時,在 RE 字符串中的空白符被忽略,除非該空白符在字符類中或在反斜槓以後;這可讓你更清晰地組織和縮進 RE。它也能夠容許你將註釋寫入 RE,這些註釋會被引擎忽略;註釋用 "#"號 來標識,不過該符號不能在字符串或反斜槓以後。

舉個例子,這裏有一個使用 re.VERBOSE 的 RE;看看讀它輕鬆了多少?

#!python
charref = re.compile(r"""&[[]]           # Start of a numeric entity reference|||here has wrong.i can't fix
(
[0-9]+[^0-9]      # Decimal form
| 0[0-7]+[^0-7]   # Octal form
| x[0-9a-fA-F]+[^0-9a-fA-F] # Hexadecimal form
)
""", re.VERBOSE)

沒有 verbose 設置, RE 會看起來象這樣:

#!python
charref = re.compile("&#([0-9]+[^0-9]"
"|0[0-7]+[^0-7]"
"|x[0-9a-fA-F]+[^0-9a-fA-F])")
相關文章
相關標籤/搜索