1 >>> consonantRegex = re.compile(r'[^aeiouAEIOU]')2 >>> consonantRegex.findall('RoboCop eats baby food. BABY FOOD.')3 ['R', 'b', 'c', 'p', ' ', 't', 's', ' ', 'b', 'b', 'y', ' ', 'f', 'd', '.', '4 ','B','B','Y',' ','F','D','.']

7.1 不用正则表达式来查找文本模式

7.2 用正则表达式查找文本模式

正则表达式,简称为 regex,是文本模式的描述方法

7.2.1 创建正则表达式对象

7.2.2 匹配 Regex 对象

1 >>> phoneNumRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')2 >>> mo = phoneNumRegex.search('My number is 415-555-4242.')3 >>> print('Phone number found:' +mo.group())4

5

6 Phone number found: 415-555-4242

7.2.3 正则表达式匹配复习

1.用 import re 导入正则表达式模块。

2.用 re.compile()函数创建一个 Regex 对象(记得使用原始字符串)。

3.向 Regex 对象的 search()方法传入想查找的字符串。它返回一个 Match 对象。

4.调用 Match 对象的 group()方法,返回实际匹配文本的字符串。

7.3 用正则表达式匹配更多模式

7.3.1 利用括号分组

>>> 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

7.3.2 用管道匹配多个分组

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

5 >>> mo2 = heroRegex.search('Tina Fey and Batman.')6 >>>mo2.group()7 'Tina Fey'

8 #Batman 和 Tina Fey 都出现在被查找的字符串中,第一次出现的匹配文本,9 将作为 Match 对象返回。

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

5 >>> mo.group(1)6 'mobile'

7.3.3 用问号实现可选匹配

1 >>> phoneRegex = re.compile(r'(\d\d\d-)?\d\d\d-\d\d\d\d')2 >>> mo1 = phoneRegex.search('My number is 415-555-4242')3 >>>mo1.group()4 '415-555-4242'

5 >>> mo2 = phoneRegex.search('My number is 555-4242')6 >>>mo2.group()7 '555-4242'

7.3.4 用星号匹配零次或多次

1 >>> batRegex = re.compile(r'Bat(wo)*man')2 >>> mo1 = batRegex.search('The Adventures of Batman')3 >>>mo1.group()4 'Batman'

5 >>> mo2 = batRegex.search('The Adventures of Batwoman')6 >>>mo2.group()7 'Batwoman'

8 >>> mo3 = batRegex.search('The Adventures of Batwowowowoman')9 >>>mo3.group()10 'Batwowowowoman'

7.3.5 用加号匹配一次或多次

7.3.6 用花括号匹配特定次数

1 >>> haRegex = re.compile(r'(Ha){3}')2 >>> mo1 = haRegex.search('HaHaHa')3 >>>mo1.group()4 'HaHaHa'

5 >>> mo2 = haRegex.search('Ha')6 >>> mo2 ==None7 True

7.4 贪心和非贪心匹配

1 >>> greedyHaRegex = re.compile(r'(Ha){3,5}')2 >>> mo1 = greedyHaRegex.search('HaHaHaHaHa')3 >>>mo1.group()4 'HaHaHaHaHa'

5 >>> nongreedyHaRegex = re.compile(r'(Ha){3,5}?')6 >>> mo2 = nongreedyHaRegex.search('HaHaHaHaHa')7 >>>mo2.group()8 'HaHaHa'

7.5 findall()方法

1 >>> phoneNumRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d') # has no groups2 >>> phoneNumRegex.findall('Cell: 415-555-9999 Work: 212-555-0000')3 ['415-555-9999', '212-555-0000']

如果在正则表达式中有分组,那么 findall 将返回元组的列表

1 >>> phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d)-(\d\d\d\d)') # has groups2 >>> phoneNumRegex.findall('Cell: 415-555-9999 Work: 212-555-0000')3 [('415', '555', '1122'), ('212', '555', '0000')]

7.7 建立自己的字符分类

字符分类[aeiouAEIOU]将匹配所有元音字 符,不论大小写

1 >>> vowelRegex = re.compile(r'[aeiouAEIOU]')2 >>> vowelRegex.findall('RoboCop eats baby food. BABY FOOD.')3 ['o', 'o', 'o', 'e', 'a', 'a', 'o', 'o', 'A', 'O', 'O']

通过在字符分类的左方括号后加上一个插入字符(^),就可以得到“非字符类”。 非字符类将匹配不在这个字符类中的所有字符

1 >>> consonantRegex = re.compile(r'[^aeiouAEIOU]')2 >>> consonantRegex.findall('RoboCop eats baby food. BABY FOOD.')3 ['R', 'b', 'c', 'p', ' ', 't', 's', ' ', 'b', 'b', 'y', ' ', 'f', 'd', '.', '4 ','B','B','Y',' ','F','D','.']

7.8 插入字符和美元字符

正则表达式 r'^Hello'匹配以'Hello'开始的字符串。

1 >>> beginsWithHello = re.compile(r'^Hello')2 >>> beginsWithHello.search('Hello world!')3 <_sre.sre_match object span="(0," match="Hello">

4 >>> beginsWithHello.search('He said hello.') ==None5 True

正则表达式 r'\d$'匹配以数字 0 到 9 结束的字符串

1 >>> endsWithNumber = re.compile(r'\d$')2 >>> endsWithNumber.search('Your number is 42')3 <_sre.sre_match object span="(16," match="2">

4 >>> endsWithNumber.search('Your number is forty two.') ==None5 True

正则表达式 r'^\d+$'匹配从开始到结束都是数字的字符串

1 >>> wholeStringIsNum = re.compile(r'^\d+$')2 >>> wholeStringIsNum.search('1234567890')3 <_sre.sre_match object span="(0," match="1234567890">

4 >>> wholeStringIsNum.search('12345xyz67890') ==None5 True6 >>> wholeStringIsNum.search('12 34567890') ==None7 True

python正则表达式匹配模式屠夫之桥_Python 编程快速上手 第 7章 模式匹配与正则表达式...相关推荐

  1. python实操100例乘法表_Python编程快速上手——Excel表格创建乘法表案例分析

    本文实例讲述了Python Excel表格创建乘法表.分享给大家供大家参考,具体如下: 题目如下: 创建程序multiplicationTable.py,从命令行接受数字N,在一个Excel电子表格中 ...

  2. python正则表达式匹配模式屠夫之桥_小甲鱼零基础入门Python学习视频+全套源码课件 Python视频教程 96讲...

    课程简介: 小甲鱼的Python课程,对初学者来说相当不错!97讲完全解读,会让大家对Python的认识从无到有,推荐给大家! ----------课程目录---------- 第000讲 愉快的开始 ...

  3. python快速编程入门课本第六章_python编程快速上手第六章实践项目参考code

    代码如下: 题目的意思是通过一个函数将列表的列表显示在组织良好的表格中,每列右对齐 tableData = [['apples', 'oranges', 'cherries', 'banana'], ...

  4. python编程思维代码_Python编程快速上手——强口令检测算法案例分析

    本文实例讲述了Python强口令检测算法.分享给大家供大家参考,具体如下: 强口令检测 题目如下: 写一个函数,它使用正则表达式,确保传入的口令字符串是强口令.强口令定义:长度不少于8个字符,同时包含 ...

  5. python编程快速上手第三章_Python编程快速上手 往让繁琐工作自动化-6.6 习题(示例代码)...

    Python编程快速上手 往让繁琐工作自动化-6.6 习题 1.什么是转义字符? 答:转义字符表示字符串中的一些字符,这些字符用别的方式很难在代码中打印出来. 2.转义字符\n和\t代表什么? 答:\ ...

  6. 搜索python题目的软件_Python编程快速上手——正则表达式查找功能案例分析

    本文实例讲述了Python正则表达式查找功能.分享给大家供大家参考,具体如下: 题目如下: 编写一个程序,打开文件夹中所有的.txt文件,查找匹配用户提供的正则表达式的所有行.结果应该打印到屏幕上. ...

  7. python编程快速上手-----让繁琐工作自动化_Python编程快速上手—让繁琐工作自动化|百度云盘|基础学习...

    下载地址: 链接:https://pan.baidu.com/s/1QRH_LyFAizkbLfJm3oyK1w 提取码:5fel 内容提要 如今,人们面临的大多数任务都可以通过编写计算机软件来完成. ...

  8. python新建文件夹口令_python编程快速上手—口令保管箱

    之前小编为大家整理了如何成为一个优秀的程序员应该具备的品质,接下来为大家展示一个简单有趣的python小项目,从中体会编程的乐趣.小编了解这个小项目之后,很是惊奇,觉得python竟然还可以做这样的事 ...

  9. python编程快速上手-----让繁琐工作自动化_Python编程快速上手让繁琐工作自动化--逗号代码和字符图网格...

    逗号代码 假定有下面这样的列表: spam = ['apples', 'bananas', 'tofu', 'cats'] 编写一个函数,它以一个列表值作为参数,返回一个字符串. 该字符串包含所有表项 ...

最新文章

  1. pythin怎么根据月份获取月初和月末_信息流是什么?到底应该怎么去做?
  2. 【多线程高并发】查看Java代码对应的汇编指令教程
  3. jvm需要多长时间才能进行转义分析? 可能比您想象的要长。
  4. 电话号码 手机号码 等准确详细 正则表达式
  5. python解决数据不均衡,上采样方法解决
  6. 各种编程技术中的$符的使用
  7. 2、Jupyter Notebook 快速入门
  8. 用计算机算3次根号0.00005,数值分析复习题13
  9. python大数据和java大数据的区别-做大数据工程师,语言选Java还是Python?
  10. 常遇电脑故障应急处理方法(转)
  11. 面试官:问你期望的工资是多少,怎么回答最好?
  12. Scrapy框架爬取百度新闻
  13. verilog的描述风格
  14. C#中常用对话框类详解
  15. 人体大脑是如何产生压力的,脑体的机制变化过程
  16. js基础知识(第二篇)
  17. 华为:海思坚持研发尖端半导体,不会进行任何重组或裁员;百度网盘下线SVIP会员免第三方广告特权;一加宣布与OPPO合并...
  18. 【RabbitMQ】学习笔记
  19. keytool生成私钥、公钥、证书详解
  20. mysql请输入一个有效类型的长度值_MySQL数据库基础(三)——SQL语言

热门文章

  1. ioctl , fcntl socket操作详解
  2. 自定义语言的实现——解释器模式
  3. 工厂三兄弟之工厂方法模式
  4. javaSE各阶段练习题--面向对象-多态-抽象类-接口
  5. JVM系列之:再谈java中的safepoint
  6. Leet Code OJ 107. Binary Tree Level Order Traversal II [Difficulty: Easy]
  7. python2.7装饰器使用_python 函数 装饰器的使用方法
  8. mysql时间与字符串相互转换
  9. mysql分析sql语句基础工具 —— explain
  10. kotlin学习之数据类(七)