正则表达式在python中的应用_学习正则表达式在python中的应用
目的:对文本的处理,正则表达式的功能很强大,可以很巧妙的过滤、匹配、获取想要的字符串,是必须学习的技能,这里只记录常用的写法,详细文档可以参看官方帮助文档。
环境:ubuntu 16.04 python 3.5
在python中使用正则表达式首先要导入re模块import re
在re模块中有几个常用的函数:
re.compile('value')
它会返回一个正则表达式regex对象,作用是对预编译提速,且第二个参数支持一些方法,把它返回给一个变量方便重复使用,函数有两个参数:匹配表达式和第二个可选参数:
匹配表达式即,正则表达式的写法,因为表达式中常用\符号,所以一般第一个参数下载r''内,r表示引号内为自然字符,python不对内部做转义,这样正则表达式用转义时不用多加一个\,如:r'\d',\d在正则中是匹配一个数字,如果没有r则要写成'\\d',这样很麻烦且不易阅读。
最简单的匹配:r'haha'匹配字符'haha',但不匹配'hehe',可以使用通配符,下面介绍:
常用通配符:
\d表示一个数字
\w表示字母、数字、下划线中任意一个,且在python3中支持匹配一个汉字。
\s表示空格、制表符和换行中任意一个。
\D, \W, \S是他们的非模式。
^匹配字符串起始位置,当^在方括号内是表示非模式,[^a-z]小写26个字母以外。
$匹配字符串结尾位置。
\b表示一个字符旁空格的位置,'it is a good job', \bgoog\b匹配good,而不会匹配goods等其他。
| 竖杠表示或,如\d|\d{2},匹配一个数字或两个数字。
自定义通配符:
[a-z]表示小写a到z的26个字母中任意一个
[]中括号模式可以包含很多,比如:[a-zA-Z0-9_]这个就是\w(只在python2中相等),还可以想这样[aeiou]只包含想要匹配的,或者特殊符号[._-],需要转义的要加上\。
以上都是只匹配符合的一个,下面学习数量:
匹配最少:{5} 表示5次,{1,5}表示1次到5次都可以,{1,}省略后面的表示至少1次。
贪婪匹配:+等同于{1,},*表示可无或更多,?表示一次或更多,.点表示就是\S,这里都会匹配多的结果,因为是贪婪模式。
限制贪婪:在贪婪模式后面加上?表示限制贪婪,匹配最少,+会尽量匹配多的,+?匹配一个。
numRegex = re.compile(r'\d{11}')
# 生成匹配11位数字的正则对象,\d是数字,{11}代表11次
re.compile()的第二个参数有:re.VERBOSE, re.IGNORECASE和re.DOTALL,后面要大写。
re.VERBOSE表示匹配中可以多行且有注释,在复杂的正则对象中使用。re.compile(r'''(
\d #匹配一个数字
\w #匹配一个字符
)''', re.VERBOSE)
re.IGORECASE表示匹配不区分大小写:re.compile(r'[a-z]', re.IGORECASE)
这个即可以匹配a,也可以匹配A。
re.DOTALL表示允许.匹配包括\s的内容re.compile(r'.*', re.DOTALL)
匹配所以内容。
匹配方法:search(), match(), findall(), finditer()
这些是匹配规则查找方法,也可以直接把正则表达式写在他们的第一个参数的位置(测试时可以,正式编写不推荐,理由在上面的compile中)而不用compile(),第二个参数是需要匹配的字符串,如re.search(r'\d+', 'aa123abc')
返回123
search()方法:
search()方法进行全字符搜索,返回的是第一个符合条件的match对象,并且它只返回一个,即使后面有其他符合条件的,也不处理,没有则返回None。aa = re.compile(r'\d\d\d+')
bb = aa.search('aa12345abc678')
bb得到返回的包含12345的match对象,而没有678
match()方法:
match()方法从字符串开始处就匹配,且只返回一个符合条件的match对象,相当于正则表达式以r'^开始,匹配也只返回开始部分,没有则返回None。aa = re.compile(r'\d+')
bb = aa.search('123ab45')
bb得到返回的包含123的match对象,没有45,且如果字符串变成'a123ab45',则返回None。
findall()方法:
findall()方法进行全字符搜索,返回所有符合条件的值,然后组成列表,即返回一个列表对象,没有则为空列表。aa = re.compile(r'\d+')
bb = aa.findall('a123b45c678')
bb得到返回的的列表['123', '45', '678']
finditer()方法:
finditer()方法进行全字符串搜索,返回所有符合条件的match对象,然后组成迭代器,用for方法可以看出迭代器里面是match对象。
这里match对象有group(), group(index)和groups()方法:
可使用它们调用返回的match对象,group()和group(0)都是得到母值,groups()返回所有group(index)组成的元组。
分组和捕获:
在正则表达式中使用圆括号()会产生分组,每个组都是元素,返回一个元组对象,可用group()获取对于序号的元素:numRegex = re.compile(r'(\d)(\d)(\d)')
当圆括号内左边使用?:表示不分组、不捕获,如:(?:\d)匹配但不分组也不捕获,不捕获则不生成match对象。
替换方法sub():
上面已经学习了查找,这个是替换方法,有两种常用方式,我称为全部隐藏替换和部分隐藏替换:
全部隐藏替换:aa = re.compile(r'engineer (\w)\w+')
bb = aa.sub(r'XX', 'engineer Ricky gave engineer Tom an apple')
bb得到字符串'XX gave XX an apple'
部分隐藏替换:aa = re.compile(r'engineer (\w)\w+')
cc = aa.sub(r'\1**', 'engineer Ricky gave engineer Tom an apple')
cc得到字符串'R** gave T** an apple'
常用的正则表达式举例:
r'0\d{2,3}-\d{8}' 匹配固定电话,如:0755-87226688,010-85332765
正则表达式在python中的应用_学习正则表达式在python中的应用相关推荐
- 使用opencv和python进行智能图像处理_使用OpenCV在Python中进行图像处理
编辑推荐: 本文将先讨论一些图像处理,然后再继续介绍可以方便使用图像处理的不同应用程序/场景,希望对您的学习有所帮助. 本文来自于tecdat ,由火龙果软件Alice编辑.推荐. 介绍 在本教程中, ...
- 正则表达式实例搜集,通过实例来学习正则表达式
正则表达式实例搜集,通过实例来学习正则表达式.本仓库实例搜集整理来自于<一些正则表达式随记>,通过一个单独仓库专门整理这些正则实例,提供一个实例网站,方便正则实例验证和查询.也方便添加新的 ...
- 学python数学要好吗_学习Python数学英语基础重要吗?
提到Python编程语言,大家就会想编程语言肯定会涉及到的就是代码,很多人看到那满屏的英文字母就头疼,觉得自己不会英语,肯定学不好Python,但是不会英语到底能不能够学习Python呢,下面小编给大 ...
- python设置图片透明度_学习python第40天
今天是在尚学堂学习python第40天今天学习了CSS 中常用样式总结,边框的风格,css中的定位,盒模型,css3中的选择器,css3中常用的属性 CSS 中常用样式总结 字体:(font) 字体的 ...
- 如何用python实现地图定位_基于 PyQt5 实现地图中定位相片拍摄位置
项目简介:本次项目主要学习了如何查找相片中的 Exif 信息,并通过 Exif 信息中的 GPS 数据在百度地图中进行定位标点,以确定相片的拍摄地点.本次实验的目的旨在通过包含 GPS 信息的相片进行 ...
- python生活中哪些运用_【想把python运用在实际生活中?那么python查询价格方法可以帮助你】- 环球网校...
[摘要]通过本次课程可以让python学员了解一下python查询价格方法,对代码编程有个感性的认知.也好让大家能够理性选择,不要盲目跟从,选择适合自己当前阶段的学习内容,循序渐进,以兴趣自我探索为向 ...
- 学生成绩管理系统实验报告_学习60天python成果,Python变成学生成绩管理系统
学习60天python成果,Python变成学生成绩管理系统 大家好,我是一名刚进入大学的python新秀,初次来到博客,希望通过博客想大家分享一下自己的学习成果,并记录自己的在大数据方向的经历,希望 ...
- python中数据读写_【循序渐进学Python——文件中数据的读写以及操作】
[循序渐进学Python--文件中数据的读写以及操作] [循序渐进学Python--文件中数据的读写以及操作] [循序渐进学Python--文件中数据的读写以及操作] 相信大家都想过自己有一天,可以用 ...
- python处在哪个阶段_如何在学Python的过程中更好地成长技术
Python是一门编程语言,所以重点在于如何用好这门语言,只有能够做好项目,才能证明自己逐步掌握好了这门语言.在学习阶段,最终的目标是要尝试着自己用Python搭建一个网站,也算是对自己学习成果的一种 ...
最新文章
- Java培训教程:”==“和 equals 方法究竟有什么区别?
- web进修之—Hibernate 继承映射(5)
- Python之常用的高阶函数——abs、map、reduce、filter、sorted
- 玩电子游戏的神经网络,告诉我们大脑是如何决策的
- 当机器人遇上神经科学时,将会发生什么?
- RunTime 入门
- hdu 3016 Man Down
- C语言%.2f四舍五入
- 史上最全企业数据产品选型对比(含数仓、报表、BI、中台、数据治理)
- token详解及常见防范措施
- R语言作业wine 数据
- 2019 最值得被记录的 14 条 AI 安防领袖语录丨年终盘点
- KTV评分系统实现总结
- 下班后两小时,决定你将会成为怎样的人
- Winform 俄罗斯方块儿练习
- Sqlserver取整
- S3DIS Dataset下载
- 鼠标宏编写脚本代码教程_PHP登录脚本代码和教程
- 库函数讲解及模拟实现库函数
- 日期函数之Dateadd、Datediff
热门文章
- Build 2018,给你带来全新的开发者体验, .NET Core 3.0带来桌面支持
- 在Firefox 58中,WebAssembly组件性能提升了10倍
- .NET Core 在程序集中集成Razor视图
- 最新版dotnet-cli下的ASP.NET Core和asp.net mvc【RC2尝鲜】
- 织梦网站翻页php,dedecms织梦网站列表页和内容页分页样式
- qiaoye.php,全自动无限生成关键词页面(黑帽SEO优化终极方法)
- vuejs 和 element 搭建的一个后台管理界面【收藏】
- 【ArcGIS微课1000例】0005:空间连接(Spatial Join)
- Android插件化开发之用DexClassLoader加载未安装的APK资源文件来实现app切换背景皮肤
- solidity modifier函数修改器 智能合约开发知识浅学(三)