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'
。使用管道字符和分组括号可以指定几种可选的模式,以让正则表达式去匹配。
如果需要匹配真正的管道字符,就用倒斜杠转义,即|。