[关闭]
@zhangyu756897669 2017-09-05T11:04:19.000000Z 字数 1672 阅读 562

在此处输入标题

未分类


更多模式匹配 正则表达式

现在,您已经知道使用Python创建和查找正则表达式对象的基本步骤,您可以尝试一些更强大的模式匹配功能。

用圆括号分组

  1. import re
  2. phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')
  3. mo = phoneNumRegex.search('My number is 415-555-4242.')
  1. mo.group(1)

'415'

  1. mo.group(2)

'555-4242'

  1. mo.group(0)

'415-555-4242'

  1. mo.group()

'415-555-4242'

  1. mo.groups()

('415', '555-4242')

  1. areaCode, mainNumber = mo.groups()
  2. print(areaCode)

415

  1. print(mainNumber)

555-4242

  1. phoneNumRegex = re.compile(r'(\(\d\d\d\)) (\d\d\d-\d\d\d\d)'
  2. mo = phoneNumRegex.search('My phone number is (415) 555-4242.')
  1. mo.group(1)

'(415)'

  1. mo.group(2)

'555-4242'

传递给re.compile()的原始字符串中的\(and\)转义字符将匹配实际的括号字符。

使用管道匹配多个组

  1. heroRegex = re.compile (r'Batman|Tina Fey')
  2. mo1 = heroRegex.search('Batman and Tina Fey.')
  3. mo1.group()

'Batman'

  1. mo2 = heroRegex.search('Tina Fey and Batman.')
  2. mo2.group()

'Tina Fey'

注意

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

'Batmobile'

  1. mo.group(1)

'mobile'

调用moGroup()方法返回完全匹配的文本“Batmobile”,而mo.group(1)只返回第一个括号组中的匹配文本的“mobile”部分。通过使用管道字符和分组括号,您可以指定希望正则表达式匹配的几种替代模式。

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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注