正则表达式在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ISA服务器之域内×××用户在外网通过CA验证连接域内×××服务器

一般情况下用户在连接服务器是是要输入密码的,如果这样的话,那么在一些公共场合输入密码的时候很有可能造成密码的泄露,从而造成不必要的损失。口令验证协议虽然硬件上的要求没有质询握手协议那么高,但是,在安全性上面…

高斯、柯西、拉格朗日都还在的话,他们应该最喜欢这个公众号

在现实生活中,你和谁在一起的确很重要,甚至能改变你的成长轨迹,决定你的人生成败。 是否还记得,当你跟学霸做同学的时候,你总会莫名其妙跟他一起撸题目;当宿舍其他兄弟正在打游戏的时候,你也想着…

div css标记,前端初学者必学的div加css标签

原标题:前端初学者必学的div加css标签今天给大家分享前端初学者必须要学习的标签,这些标签你都会了吗?DIV加css标签页头:header登录条:loginBar标志:logo侧栏:sideBar广告:banner导航:nav子导航:subNav菜单:menu子菜单:subMenu搜索:search滚动…

python123动物重量排序_Python爬虫图片学习(一)

Python爬虫学习 一、Python安装与调用 python官网安装地址:https://www.python.org/python帮助手册:在本机的路径C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Doc 创建一个1.py文件,右键打开.py文件,用IDLE方…

巧用ActionFilterAttribute实现API日志的记录

背景上回提到开发web api的时候&#xff0c;一般是需要记录api的输入输出信息&#xff0c;方便后续排查问题&#xff1b;使用的是委托的形式进行记录日志。使用Func<T, TResult> 委托实现API日志的记录这次我们使用另外一种方式&#xff0c;Filter来记录输入输出日志。实…

activity 防止多次打开_Android开发Activity任务和返回栈

任务是用户在执行某项工作时与之互动的一系列 Activity 的集合。这些 Activity 按照每个 Activity 打开的顺序排列在一个返回堆栈中。例如&#xff0c;电子邮件应用可能有一个 Activity 来显示新邮件列表。当用户选择一封邮件时&#xff0c;系统会打开一个新的 Activity 来显示…

全程图解:Centos 5.2 下 ORACLE10G 安装配置

1、检查并安装ORACLE必须的软件包在CENTOS上安装Oracle&#xff0c;需要将ORACLE所必须的软件包逐一安装, 参考Oracle安装文档关于Red Hat Enterprise Linux 4.0部分&#xff0c;所需的软件包如下:binutils-2.17.50.0.6-6.el5compat-db-4.2.52-5.1compat-libstdc-33-3.2.3-61co…

css原生样式支持,原生JS读写CSS样式的方法

通过Element对象的getAttribute()、setAttribute()、removeAttribute()直接读写style属性如&#xff1a;elm.setAttribute(style,color:red;line-height:30px);利用document.styleSheets属性&#xff0c;返回当前页面的所有StyleSheet对象(即所有样式表)&#xff0c;它是一个只…

提升代码可读性的 10 个技巧

具有较强可读性的代码&#xff0c;能帮助你调试程序&#xff0c;不让自己活得太累。 代码可读性是计算机编程领域中普遍存在的问题。这也是我们成为开发者首先要学习的事情之一。本文会详细介绍在编写强可读性代码时最佳实践中最重要的一部分内容。 1 - 注释和文档 IDE&#xf…

phpsotrm怎么 搜索功能_Windows 10 网络搜索设计太反人类?教你如何彻底关闭它

来源&#xff1a;太平洋电脑网我们知道微软在Windows 10中&#xff0c;特别加强了系统的搜索功能&#xff0c;但Windows 10的搜索的确很难称得上好用。抛开效率低下、呈现结果少、造成系统卡顿等老生常谈的问题不论&#xff0c;在功能设计方面&#xff0c;Windows 10搜索也有硬…

支撑性服务 自动化能力

连载传送门&#xff1a;什么是云原生&#xff1f;云原生设计理念.NET 微服务谈到云原生&#xff0c;绕不开“容器化”Backing services云原生系统依赖于许多不同的辅助资源&#xff0c;例如数据存储、消息队列、监视和身份服务&#xff0c;这些服务统称为支撑性服务。下图显示了…

网站logo放在服务器,自己建网站如何设计网站LOGO

LOGO是一个网站的形象代表或者说是品牌的象征&#xff0c;用户记住了网站LOGO&#xff0c;就相当于记住了网站&#xff0c;因此&#xff0c;自己建网站时要融入网站LOGO的设计&#xff0c;潜移默化地把LOGO形象植入用户脑海中&#xff0c;把网站与LOGO紧密连接在一起&#xff0…

python http协议获取对方的ip地址_http协议(一)基础知识

参考&#xff1a;老张http://link.zhihu.com/?targethttps%3A//www.cnblogs.com/imyalost/p/5627816.html参考书籍——《图解http》当我们在浏览器的地址栏中输入网址&#xff0c;然后点击回车&#xff0c;接着&#xff0c;浏览器就会呈现出我们需要的web界面&#xff0c;那么…

好久没到这个地方来.

懒了,好久没写随笔了,学的东西不少,学过就忘记.没有整理,不成系统.最近也没什么好说的,瞎掰一通吧.--有时候觉得,我就是个愤青. 总感觉自己的思维很混乱,很没有头绪,东边拉袋水泥,西边拼块砖头的,没有结构,也不成体系,就是很多很原始的东西的简单堆积.得改...... 发现博客园是最…

TIOBE编程语言排行榜,Python遥遥领先

在这个快节奏的时代&#xff0c;要想走在潮流前端&#xff0c;你需要用最有效的方式&#xff0c;最有效率的工具&#xff0c;学习最有用的知识。而如今人工智能和数据分析爆发&#xff0c;python就是一颗冉冉升起的新星&#xff0c;因为简单易用和广阔的可能性&#xff0c;不仅…

mongodb默认的用户名密码_设置mongodb的用户名密码 | Think in Drupal

作者&#xff1a;亚艾元技术部我们在一个Nodejs项目中,使用了mongodb数据库&#xff0c;使用习惯和mysql很不一样&#xff0c;在摸索中前进&#xff0c;其中一个问题&#xff0c;mongodb安装完了以后&#xff0c;不用设置用户名密码&#xff0c;就可以登录使用。开始的时候&…

Dapr是如何简化微服务的开发和部署

基于微服务设计模式的现代应用程序面临着一系列挑战。微服务需要有一个强大的服务发现机制来实现动态连接。它们需要松散耦合&#xff0c;实现自主性和独立缩放。微服务需要支持多种语言&#xff0c;其中每个服务都是以最合适的语言、框架和运行时实现的。尽管采用容器和编排引…

table 内 下拉列表 被遮挡_一个简洁、有趣的无限下拉方案

本文主旨长列表渲染、无限下拉也算是前端开发老生常谈的问题之一了&#xff0c;本文将介绍一种简洁、巧妙、高效的方式来实现。话不多说&#xff0c;看下图&#xff0c;也许你可以发现什么&#xff1f;无限下拉示意图不知你是否从上面这张图中注意到了什么&#xff0c;比如只是…

天龙八部服务器维护后提BB,天龙八部:宠物比号值钱?玩家哭诉附体BB半年也卖不出去...

说到天龙八部的附体宝宝&#xff0c;相信许多爱美的玩家基本上都人手一只。附体后的增益多不多无所谓&#xff0c;首先附体后身上有龙、凤凰、蝴蝶等之类的特效&#xff0c;让许多玩家觉得游戏中角色颜值增添不少&#xff0c;当然一只属性不错的附体珍兽&#xff0c;也能够给游…

asp.net 动态添加JavaScript方法

//在页面顶部添加脚本 if (!Page.ClientScript.IsClientScriptBlockRegistered("myscriptKey"))//判断是否已经存在相同//键值的ScriptBlock { string myScript "function AlertHello(){alert(hello xuanhun!!);}";//脚本内容 …