正则表达式——更多匹配模式

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”部分。通过使用管道字符和分组括号,您可以指定希望正则表达式匹配的几种替代模式。

如果您需要匹配实际的管道字符,请使用反斜杠(如\ |)将其转义。