目的:对文本的处理,正则表达式的功能很强大,可以很巧妙的过滤、匹配、获取想要的字符串,是必须学习的技能,这里只记录常用的写法,详细文档可以参看官方帮助文档。

环境: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中的应用相关推荐

  1. 使用opencv和python进行智能图像处理_使用OpenCV在Python中进行图像处理

    编辑推荐: 本文将先讨论一些图像处理,然后再继续介绍可以方便使用图像处理的不同应用程序/场景,希望对您的学习有所帮助. 本文来自于tecdat ,由火龙果软件Alice编辑.推荐. 介绍 在本教程中, ...

  2. 正则表达式实例搜集,通过实例来学习正则表达式

    正则表达式实例搜集,通过实例来学习正则表达式.本仓库实例搜集整理来自于<一些正则表达式随记>,通过一个单独仓库专门整理这些正则实例,提供一个实例网站,方便正则实例验证和查询.也方便添加新的 ...

  3. 学python数学要好吗_学习Python数学英语基础重要吗?

    提到Python编程语言,大家就会想编程语言肯定会涉及到的就是代码,很多人看到那满屏的英文字母就头疼,觉得自己不会英语,肯定学不好Python,但是不会英语到底能不能够学习Python呢,下面小编给大 ...

  4. python设置图片透明度_学习python第40天

    今天是在尚学堂学习python第40天今天学习了CSS 中常用样式总结,边框的风格,css中的定位,盒模型,css3中的选择器,css3中常用的属性 CSS 中常用样式总结 字体:(font) 字体的 ...

  5. 如何用python实现地图定位_基于 PyQt5 实现地图中定位相片拍摄位置

    项目简介:本次项目主要学习了如何查找相片中的 Exif 信息,并通过 Exif 信息中的 GPS 数据在百度地图中进行定位标点,以确定相片的拍摄地点.本次实验的目的旨在通过包含 GPS 信息的相片进行 ...

  6. python生活中哪些运用_【想把python运用在实际生活中?那么python查询价格方法可以帮助你】- 环球网校...

    [摘要]通过本次课程可以让python学员了解一下python查询价格方法,对代码编程有个感性的认知.也好让大家能够理性选择,不要盲目跟从,选择适合自己当前阶段的学习内容,循序渐进,以兴趣自我探索为向 ...

  7. 学生成绩管理系统实验报告_学习60天python成果,Python变成学生成绩管理系统

    学习60天python成果,Python变成学生成绩管理系统 大家好,我是一名刚进入大学的python新秀,初次来到博客,希望通过博客想大家分享一下自己的学习成果,并记录自己的在大数据方向的经历,希望 ...

  8. python中数据读写_【循序渐进学Python——文件中数据的读写以及操作】

    [循序渐进学Python--文件中数据的读写以及操作] [循序渐进学Python--文件中数据的读写以及操作] [循序渐进学Python--文件中数据的读写以及操作] 相信大家都想过自己有一天,可以用 ...

  9. python处在哪个阶段_如何在学Python的过程中更好地成长技术

    Python是一门编程语言,所以重点在于如何用好这门语言,只有能够做好项目,才能证明自己逐步掌握好了这门语言.在学习阶段,最终的目标是要尝试着自己用Python搭建一个网站,也算是对自己学习成果的一种 ...

最新文章

  1. Java培训教程:”==“和 equals 方法究竟有什么区别?
  2. web进修之—Hibernate 继承映射(5)
  3. Python之常用的高阶函数——abs、map、reduce、filter、sorted
  4. 玩电子游戏的神经网络,告诉我们大脑是如何决策的
  5. 当机器人遇上神经科学时,将会发生什么?
  6. RunTime 入门
  7. hdu 3016 Man Down
  8. C语言%.2f四舍五入
  9. 史上最全企业数据产品选型对比(含数仓、报表、BI、中台、数据治理)
  10. token详解及常见防范措施
  11. R语言作业wine 数据
  12. 2019 最值得被记录的 14 条 AI 安防领袖语录丨年终盘点
  13. KTV评分系统实现总结
  14. 下班后两小时,决定你将会成为怎样的人
  15. Winform 俄罗斯方块儿练习
  16. Sqlserver取整
  17. S3DIS Dataset下载
  18. 鼠标宏编写脚本代码教程_PHP登录脚本代码和教程
  19. 库函数讲解及模拟实现库函数
  20. 日期函数之Dateadd、Datediff

热门文章

  1. Build 2018,给你带来全新的开发者体验, .NET Core 3.0带来桌面支持
  2. 在Firefox 58中,WebAssembly组件性能提升了10倍
  3. .NET Core 在程序集中集成Razor视图
  4. 最新版dotnet-cli下的ASP.NET Core和asp.net mvc【RC2尝鲜】
  5. 织梦网站翻页php,dedecms织梦网站列表页和内容页分页样式
  6. qiaoye.php,全自动无限生成关键词页面(黑帽SEO优化终极方法)
  7. vuejs 和 element 搭建的一个后台管理界面【收藏】
  8. 【ArcGIS微课1000例】0005:空间连接(Spatial Join)
  9. Android插件化开发之用DexClassLoader加载未安装的APK资源文件来实现app切换背景皮肤
  10. solidity modifier函数修改器 智能合约开发知识浅学(三)