@zhangyu756897669
2017-09-05T11:04:19.000000Z
字数 1672
阅读 562
未分类
现在,您已经知道使用Python创建和查找正则表达式对象的基本步骤,您可以尝试一些更强大的模式匹配功能。
假设您想将区号与电话号码的其余部分分开。 添加括号将在正则表达式中创建组:(\ d \ d \ d) - (\ d \ d \ d- \ d \ d \ d \ d)。然后可以使用group()匹配对象方法从一个组中获取匹配的文本。
正则表达式字符串中的第一组括号将为组1.第二组将为组2.通过将整数1或2传递给group()匹配对象方法,您可以获取匹配文本的不同部分。将0或没有传递给group()方法将返回整个匹配的文本。
import re
phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')
mo = phoneNumRegex.search('My number is 415-555-4242.')
mo.group(1)
'415'
mo.group(2)
'555-4242'
mo.group(0)
'415-555-4242'
mo.group()
'415-555-4242'
mo.groups()
('415', '555-4242')
areaCode, mainNumber = mo.groups()
print(areaCode)
415
print(mainNumber)
555-4242
由于mo.groups()返回多个值的元组,因此可以使用多重赋值技术将每个值分配给单独的变量,如前一个areaCode,mainNumber = mo.groups()行。
括号在正则表达式中有特殊的含义,但是如果您需要在文本中匹配一个括号,该怎么办?例如,您可能想要匹配的电话号码区域代码设置在括号中。在这种情况下,您需要使用反斜杠来转义(和)字符。
phoneNumRegex = re.compile(r'(\(\d\d\d\)) (\d\d\d-\d\d\d\d)'
mo = phoneNumRegex.search('My phone number is (415) 555-4242.')
mo.group(1)
'(415)'
mo.group(2)
'555-4242'
传递给re.compile()的原始字符串中的\(and\)转义字符将匹配实际的括号字符。
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'
batRegex = re.compile(r'Bat(man|mobile|copter|bat)')
mo = batRegex.search('Batmobile lost a wheel')
mo.group()
'Batmobile'
mo.group(1)
'mobile'
调用moGroup()方法返回完全匹配的文本“Batmobile”,而mo.group(1)只返回第一个括号组中的匹配文本的“mobile”部分。通过使用管道字符和分组括号,您可以指定希望正则表达式匹配的几种替代模式。
如果您需要匹配实际的管道字符,请使用反斜杠(如\ |)将其转义。