栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

7.2.3 正则表达式匹配复习

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

7.2.3 正则表达式匹配复习

7.2.3   正则表达式匹配复习
虽然在Python 中使用正则表达式有几个步骤,但每一步都相当简单。
1.用 import re 导入正则表达式模块。
2.用 re.compile()函数创建一个Regex 对象(记得使用原始字符串)。
3.向 Regex 对象的 search()方法传入想查找的字符串。它返回一个 Match 对象。
4.调用 Match 对象的 group()方法,返回实际匹配文本的字符串。

注意       虽然我鼓励你在交互式环境中输入示例代码,但你也应该利用基于网页的正则表达式测试程序。它可以向你清楚地展示,一个正则表达式如何匹配输入的一段文本。我推荐的测试程序位于 
http://regexpal.com/。


7.3    用正则表达式匹配更多模式
既然你已知道用Python 创建和查找正则表达式对象的基本步骤,就可以尝试一些更强大的模式匹配功能了。

7.3.1   利用括号分组
假定想要将区号从电话号码中分离。添加括号将在正则表达式中创建“分组”: (ddd)-(ddd-dddd)。然后可以使用 group()匹配对象方法,从一个分组中获取匹配的文本。
正则表达式字符串中的第一对括号是第 1 组。第二对括号是第 2 组。向 group()匹配对象方法传入整数 1 或 2,就可以取得匹配文本的不同部分。向 group()方法传入 0 
或不传入参数,将返回整个匹配的文本。在交互式环境中输入以下代码:
>>>  phoneNumRegex  =  re.compile(r'(ddd)-(ddd-dddd)')
>>>  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'((ddd))  (ddd-dddd)')
>>>  mo  =  phoneNumRegex.search('My  phone  number  is  (415)  555-4242.')
>>>  mo.group(1)
'(415)'
>>>  mo.group(2)
'555-4242'
传递给 re.compile()的原始字符串中,(和)转义字符将匹配实际的括号字符。
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/656244.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号