Python教程之正则表达式(提高篇)
上一节大灰狼和大家分享了正则表达式的基础使用技巧,使用re模块中的compile()方法即可进行正则表达式的匹配运算,不清楚的可以查看上一篇“Python教程之正则表达式(基础篇)” 。
但我们知道正则表达式所要匹配的内容千姿百态,除了我们最常见的数字以外还有字母以及特殊符号,同时在一篇将要匹配的文本中,符合要求的匹配对象可能多个。
所以应该可以按照要求将我们要匹配的内容全都读取出来,所以这一节大灰狼和大家分享一下如何更加愣货的使用正则表达式来匹配文本。
.
findall()方法
首先在上一节关于正则表达式的基本匹配中讲到使用‘d’来匹配数字0-9,同时在正则表达式中还有类似的匹配。
我们规定:在正则表达式的使用过程中,使用反斜杠‘’加字母匹配常见的字符,具体的匹配规则如下图所示:
缩写字符分类 |
表示 |
---|---|
d |
0到9的任何数字 |
D |
除0到9以外的任何字符 |
w |
任何数字、字母、下划线字符 |
W |
除数字 字母 下划线以外的任何字符 |
s |
空格、制表符、换行符 |
S |
除空格、制表符、换行符以外的任何字符 |
同时在正则表达式的使用过程中,re模块中还有另外一种读取文本匹配内容的方法:findall()方法。
该方法与我们之前所讲的group()方法不同,re模块中的group()方法只能匹配文本中的第一个符合要求的匹配对象,而findall()方法则匹配文本中所有符合要求的内容。
并且以列表的形式返回所有符合要求的匹配。对比实现效果代码如下:
search()和findall()方法比较
import re
charRegex = re.compile(r'ddd-dddd-dddd')
text = 'the tel is 123-4567-8910 and 456-7891-1234 and 789-1234-5678'
mo = charRegex.search(text)
print('search()方法的匹配结果:')
print(mo.group())
print('findall()方法的匹配结果:')
print(charRegex.findall(text))
.
建立自己的字符分类
在使用正则表达式的时候我们通常会需要使用这些匹配字符以外的东西,如我们特定匹配某一个字母或数字。
因此在Python的re模块中设定,在建立正则表达式的时候可以使用‘[]’中括号来特定设定要匹配的字符,这样在匹配文本的时候,就会特定匹配中括号里面的内容,效果代码如下:
建立自己的字符匹配
import re
charRegex = re.compile(r'[abcd3]')
text = 'the tel is 456-7891-1234 and 789-1234-5678'
print(charRegex.findall(text))
.
不区分大小写的匹配
在使用正则表达式进行匹配的时候,我们可能往往会因为大小写字母的匹配而感到烦恼。
那么在re模块中就具备了不区分大小写的匹配设定,在正则表达式的设定过程中,使用re.IGNORECASE(简写为re.I)方法来消除大小写的匹配。
效果代码如下;
re.I方法不区分大小写匹配
import re
charRegex = re.compile(r'[abcde]', re.I)
text = 'Regex AND compile'
print(charRegex.findall(text))
.
sub()方法替换字符串
正则表达式不仅能够匹配特定的文本对象,而且还可以使用新的字符将这些字符替换,这便是re模块中的sub()方法的功能。
Regex的sub()方法将传入两个字符串参数,第一个参数是一个字符串,是用于替换发现的匹配,第二个参数是将要被匹配的文本对象,使用该方法可以将匹配到的内容替换掉。实现代码效果如下:
sub()方法
import re
charRegex = re.compile(r'and')
text = 'Regex and compile and is pythonandider'
print(charRegex.sub('www', text))
以上就是正则表达式最常用的一些方法,但正则表达式的使用并非仅限于此。
关注分享,大灰狼陪你一起进步! 同时也可以关注我的微信公众号“灰狼洞主” 获取更多Python技术分享和互联网相关资讯!
- 一个oracle查询引起的bug (r4笔记第59天)
- Java基础-18(02)总结Map,HashMap,HashMap与Hashtable区别,Collections工具类
- 特殊的物化视图刷新 (r4笔记第77天)
- 通过单例模式模拟RAC连接 (r4笔记第76天)
- 网站上的验证码是怎么产生的?
- Java基础-17(01)总结,登录注册案例,Set集合,HashSet
- mongoDB初探第一篇(r4笔记第75天)
- 重温快速排序(r4笔记第73天)
- Java基础-17(01)总结,TreeSet,LinkHashSet
- 海量数据迁移之数据抽取流程 (r4笔记第72天)
- CSS Selectors Level 4新特性全面解析
- 巧用外部表避免大量的insert (r4笔记第71天)
- 如何用java语言实现C#中的ref关键字(按引用传递参数)的效果
- 16(01)总结List的子类,ArrayList,Vector,LinkedList
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Keras 实现加载预训练模型并冻结网络的层
- Django-imagekit的使用详解
- Python类super()及私有属性原理解析
- Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
- 简单了解Python多态与属性运行原理
- 树莓派升级python的具体步骤
- keras中的loss、optimizer、metrics用法
- Django中F函数的使用示例代码详解
- 详解pandas获取Dataframe元素值的几种方法
- pandas数据处理之绘图的实现
- Pandas把dataframe或series转换成list的方法
- Django 构建模板form表单的两种方法
- 详解pandas.DataFrame.plot() 画图函数
- python中pandas库中DataFrame对行和列的操作使用方法示例
- PHP实现简易计算器功能