模块级函数

你不必定要产生一个 RegexObject 对象而后再调用它的方法;re 模块也提供了顶级函数调用如 match()、search()、sub() 等等。这些函数使用 RE 字符串做为第一个参数,然后面的参数则与相应 RegexObject 的方法参数相同,返回则要么是 None 要么就是一个 MatchObject 的实例。python

#!python
>>> print re.match(r'From\s+', 'Fromage amk')
None
>>> re.match(r'From\s+', 'From amk Thu May 14 19:12:10 1998')
<re.MatchObject instance at 80c5978>

Under the hood, 这些函数简单地产生一个 RegexOject 并在其上调用相应的方法。它们也在缓存里保存编译后的对象,所以在未来调用用到相同 RE 时就会更快。正则表达式

你将使用这些模块级函数,仍是先获得一个 RegexObject 再调用它的方法呢?如何选择依赖于怎样用 RE 更有效率以及你我的编码风格。若是一个 RE 在代码中只作用一次的话,那么模块级函数也许更方便。若是程序包含不少的正则表达式,或在多处复用同一个的话,那么将所有定义放在一块儿,在一段代码中提早编译全部的 REs 更有用。从标准库中看一个例子,这是从 xmllib.py 文件中提取出来的:缓存

#!python
ref = re.compile( ... )
entityref = re.compile( ... )
charref = re.compile( ... )
starttagopen = re.compile( ... )
相关文章
相关标签/搜索