编译标志

编译标志让你能够修改正则表达式的一些运行方式。在 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])")
相关文章
相关标签/搜索