当前位置:嗨网首页>书籍在线阅读

09-用管道匹配多个分组

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.3.2 用管道匹配多个分组

字符|称为“管道”,希望匹配许多表达式中的一个时,就可以使用它。例如,正则表达式 r'Batman|Tina Fey' 将匹配 'Batman''Tina Fey'

如果Batman和Tina Fey都出现在被查找的字符串中,那么第一次出现的匹配文本将作为 Match 对象返回。在交互式环境中输入以下代码:

>>> heroRegex = re.compile (r'Batman|Tina Fey')
>>> mo1 = heroRegex.search('Batman and Tina Fey.')
>>> mo1.group()
'Batman'
>>> mo2 = heroRegex.search('Tina Fey and Batman.')
>>> mo2.group()
'Tina Fey'

注意: 利用 findall() 方法可以找到“所有”匹配的地方,这将在7.5节“ findall() 方法”中讨论。

也可以使用管道来匹配多个模式中的一个,这些模式可作为正则表达式的一部分。例如,假设你希望匹配 'Batman''Batmobile''Batcopter''Batbat' 中的任意一个。因为这些字符串都以 Bat 开始,所以如果能够只指定一次前缀就很方便。这可以通过括号实现。在交互式环境中输入以下代码:

>>> batRegex = re.compile(r'Bat(man|mobile|copter|bat)')
>>> mo = batRegex.search('Batmobile lost a wheel')
>>> mo.group()
'Batmobile'
>>> mo.group(1)
'mobile'

方法调用 mo.group() 返回了完全匹配的文本 'Batmobile' ,而 mo.group(1) 只是返回第一个括号分组内匹配的文本 'mobile' 。使用管道字符和分组括号可以指定几种可选的模式,以让正则表达式去匹配。

如果需要匹配真正的管道字符,就用倒斜杠转义,即|。