15.3 正则表达式和Python语言
15.3.1 re模块:核心函数和方法
在模式匹配之前,正则表达式必须先被编译成regex对象。由于正则表达式在执行过程中被多次用于比较,所以强烈建议对它做预编译,而且,既然正则表达式的编译是必须的,那使用预编译来提升执行性能无疑是明智之举。re.compile()就是用来提供此功能的。
15.3.2 使用compile()编译正则表达式
大多数re模块函数都可以作为regex对象的方法。尽管我们建议预编译,但它并不是必需的。
15.3.3 匹配对象和group()、groups()方法
在处理正则表达式时,除regex对象外,还有另一种对象类型-匹配对象。这些对象是在match()或search()被成功调用之后所返回的结果。匹配对象有两个主要方法:group()和groups()。
group()方法或者返回所有匹配对象或是根据要求返回某个特定子组。groups()则很简单,它返回一个包含唯一或所有子组的元组。如果正则表达式中没有子组的话,groups()将返回一个空元组,而group()仍会返回所有匹配对象。
15.3.4 用match()匹配字符串
match()函数尝试从字符串的开头开始对模式进行匹配。如果匹配成功,就返回一个匹配对象,而如果匹配失败了,就返回None。匹配对象的group()方法可以用来显示那个成功的匹配。
>>> import re
>>> name = re.match("Fan", "Fan")
>>> if name is not None:
... print name.group()
...
Fan
>>>
15.3.5 search()在一个字符串中查找一个模式(搜索与匹配的比较)
search会检查参数字符串任意位置的地方给定正则表达式模式的匹配情况。如果搜索到成功的匹配,会返回一个匹配对象,否则返回None。
>>> import re
>>> name = re.search("Fan", "Anders Fan")
>>> if name is not None:
... print name.group()
...
Fan
>>>
15.3.6 匹配多个字符串(|)
>>> import re
>>> name = re.search("Xuyang|Xufei|Bingfeng", "Bingfeng Fan")
>>> if name is not None:
... print name.group()
...
Bingfeng
>>>
15.3.7 匹配任意单个字符(.)
>>> name = re.search(".soft", "Beyondsoft")
>>> if name is not None:
... print name.group()
...
dsoft
>>>
>>> name = re.search("3\.14", "3.1415926")
>>> if name is not None:
... print name.group()
...
3.14
>>>
15.3.8 创建字符集合([])
>>> name = re.search("[th]soft", "shsoft")
>>> if name is not None:
... print name.group()
...
hsoft
>>>
15.3.9 重复、特殊字符和子组
>>> patt = '\w+@(\w+\.)?\w+\.com'
>>> mail = re.match(patt, 'xufei96@hotmail.com')
>>> if mail is not None:
... print mail.group()
...
xufei96@hotmail.com
>>>