正则表达式——更多匹配模式
Posted 怪兽宇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式——更多匹配模式相关的知识,希望对你有一定的参考价值。
更多模式匹配 正则表达式
现在,您已经知道使用Python创建和查找正则表达式对象的基本步骤,您可以尝试一些更强大的模式匹配功能。
用圆括号分组
正则表达式字符串中的第一组括号将为组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’
- 如果您想要一次检索所有组,请使用groups()方法 - 记下名称的复数形式。
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\)转义字符将匹配实际的括号字符。
使用管道匹配多个组
- “|”被称为管道。您可以在任何需要匹配其中一个表达式的地方使用它。例如,正则表达式r’Batman | Tina Fey将匹配“Batman”或“Tina Fey”。
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()中讨论的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’
调用moGroup()方法返回完全匹配的文本“Batmobile”,而mo.group(1)只返回第一个括号组中的匹配文本的“mobile”部分。通过使用管道字符和分组括号,您可以指定希望正则表达式匹配的几种替代模式。
如果您需要匹配实际的管道字符,请使用反斜杠(如\ |)将其转义。
以上是关于正则表达式——更多匹配模式的主要内容,如果未能解决你的问题,请参考以下文章