您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

python正则表达式re模块的高级用法

时间:2019-08-26 13:32:20  来源:  作者:

re模块的高级用法

search

需求:匹配出文章阅读的次数

#coding=utf-8
import re
ret = re.search(r"d+", "阅读次数为 9999")
ret.group()

运行结果

'9999'

findall

需求:统计出Python、c、c++相应文章阅读的次数

#coding=utf-8
import re
ret = re.findall(r"d+", "python = 9999, c = 7890, c++ = 12345")
print(ret)

运行结果:

['9999', '7890', '12345']

sub 将匹配到的数据进行替换

需求:将匹配到的阅读次数加1

方法1:

#coding=utf-8
import re
ret = re.sub(r"d+", '998', "python = 997")
print(ret)

运行结果:

python = 998

方法2:

#coding=utf-8
import re
def add(temp):
 strNum = temp.group()
 num = int(strNum) + 1
 return str(num)
ret = re.sub(r"d+", add, "python = 997")
print(ret)
ret = re.sub(r"d+", add, "python = 99")
print(ret)

运行结果:

python = 998
python = 100

练习

python正则表达式re模块的高级用法

 

从下面的字符串中取出文本

<div>
 <p>岗位职责:</p>
<p>完成推荐算法、数据统计、接口、后台等服务器端相关工作</p>
<p><br></p>
<p>必备要求:</p>
<p>良好的自我驱动力和职业素养,工作积极主动、结果导向</p>
<p> <br></p>
<p>技术要求:</p>
<p>1、一年以上 Python 开发经验,掌握面向对象分析和设计,了解设计模式</p>
<p>2、掌握HTTP协议,熟悉MVC、MVVM等概念以及相关WEB开发框架</p>
<p>3、掌握关系数据库开发设计,掌握 SQL,熟练使用 MySQL/PostgreSQL 中的一种<br></p>
<p>4、掌握NoSQL、MQ,熟练使用对应技术解决方案</p>
<p>5、熟悉 JAVAscript/css/html5,JQuery、React、Vue.js</p>
<p> <br></p>
<p>加分项:</p>
<p>大数据,数理统计,机器学习,sklearn,高性能,大并发。</p>
 </div>

参考答案:

re.sub(r"<[^>]*>| |n", "", test_str)

split 根据匹配进行切割字符串,并返回一个列表

需求:切割字符串“info:xiaoZhang 33 shandong”

#coding=utf-8
import re
ret = re.split(r":| ","info:xiaoZhang 33 shandong")
print(ret)

运行结果:

['info', 'xiaoZhang', '33', 'shandong']

python贪婪和非贪婪

Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;

非贪婪则相反,总是尝试匹配尽可能少的字符。

在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。

>>> s="This is a number 234-235-22-423"
>>> r=re.match(".+(d+-d+-d+-d+)",s)
>>> r.group(1)
'4-235-22-423'
>>> r=re.match(".+?(d+-d+-d+-d+)",s)
>>> r.group(1)
'234-235-22-423'
>>>

正则表达式模式中使用到通配字,那它在从左到右的顺序求值时,会尽量“抓取”满足匹配最长字符串,在我们上面的例子里面,“.+”会从字符串的启始处抓取满足模式的最长字符,其中包括我们想得到的第一个整型字段的中的大部分,“d+”只需一位字符就可以匹配,所以它匹配了数字“4”,而“.+”则匹配了从字符串起始到这个第一位数字4之前的所有字符。

解决方式:非贪婪操作符“?”,这个操作符可以用在"*","+","?"的后面,要求正则匹配的越少越好。

>>> re.match(r"aa(d+)","aa2343ddd").group(1)
'2343'
>>> re.match(r"aa(d+?)","aa2343ddd").group(1)
'2'
>>> re.match(r"aa(d+)ddd","aa2343ddd").group(1) 
'2343'
>>> re.match(r"aa(d+?)ddd","aa2343ddd").group(1)
'2343'
>>>

练一练

python正则表达式re模块的高级用法

 

字符串为:

<img data-original="https://rpic.douyucdn.cn/AppCovers/2016/11/13/1213973_201611131917_small.jpg" src="https://rpic.douyucdn.cn/appCovers/2016/11/13/1213973_201611131917_small.jpg" style="display: inline;">

请提取url地址

参考答案

re.search(r"https://.*?.jpg", test_str)

r的作用

>>> mm = "c:\a\b\c"
>>> mm
'c:\a\b\c'
>>> print(mm)
c:abc
>>> re.match("c:\\",mm).group()
'c:\'
>>> ret = re.match("c:\\",mm).group()
>>> print(ret)
c:
>>> ret = re.match("c:\\a",mm).group()
>>> print(ret)
c:a
>>> ret = re.match(r"c:\a",mm).group()
>>> print(ret)
c:a
>>> ret = re.match(r"c:a",mm).group()
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>>

说明

Python中字符串前面加上 r 表示原生字符串,

与大多数编程语言相同,正则表达式里使用"“作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符”",那么使用编程语言表示的正则表达式里将需要4个反斜杠"":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。

Python里的原生字符串很好地解决了这个问题,有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。

>>> ret = re.match(r"c:\a",mm).group()
>>> print(ret)
c:a


Tags:正则表达式   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、简介很多时候我们都需要用到一些验证的方法,有时候需要用正则表达式校验数据时,往往需要到网上找很久,结果找到的还不是很符合自己想要的。所以我把自己整理的校验帮助类分...【详细内容】
2021-12-27  Tags: 正则表达式  点击:(2)  评论:(0)  加入收藏
1. 什么是正则表达式正则表达式(Regular Expressions),也称为 “regex” 或 “regexp” 是使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,这样程序就可以将该模...【详细内容】
2021-11-26  Tags: 正则表达式  点击:(25)  评论:(0)  加入收藏
写在前面我们在日常的Java开发中,经常需要处理一些字符串,这个时候正则表达式是非常有用的。几乎在所有的编程语言中都支持正则表达式。以下我将压箱底多年的干货搬出来给大家...【详细内容】
2021-10-25  Tags: 正则表达式  点击:(28)  评论:(0)  加入收藏
正则作为处理字符串的一个实用工具,在Python中经常会用到,比如爬虫爬取数据时常用正则来检索字符串等等。正则表达式已经内嵌在Python中,通过导入re模块就可以使用,作为刚学Pyth...【详细内容】
2021-08-31  Tags: 正则表达式  点击:(77)  评论:(0)  加入收藏
打算给闺女买几本书,计划是列一个书单让闺女自己选。于是找到另一个还算不错的书单介绍页,可惜它不让复制,鼠标右键选中提示扫码以后就跳到学而思的网页让加老师的微信之类的。...【详细内容】
2021-08-10  Tags: 正则表达式  点击:(84)  评论:(0)  加入收藏
正则表达式到底是个啥?在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录...【详细内容】
2021-04-27  Tags: 正则表达式  点击:(243)  评论:(0)  加入收藏
作者:mathe,腾讯QQ音乐前端开发工程师正则表达式具有伟大技术发明的一切特点,它简单、优美、功能强大、妙用无穷。对于很多实际工作来讲,正则表达式简直是灵丹妙药,能够成百倍地...【详细内容】
2021-02-24  Tags: 正则表达式  点击:(198)  评论:(0)  加入收藏
概述正则表达式非常强大,能够解决我们开发时用于匹配一些特定的要求。并且java中还提供了相当强大的方法,扩展其功能性。下面我们就来介绍一下:1.定义一个关于用户名的正则表达...【详细内容】
2020-08-11  Tags: 正则表达式  点击:(68)  评论:(0)  加入收藏
“代码胜于雄辩。”&mdash;&mdash;林纳斯&middot;托瓦兹(Linus Torvalds)许多编程语言和操作系统都支持正则表达式(regular expression):定义搜索模式的一组字符串。正则表达式可...【详细内容】
2020-07-14  Tags: 正则表达式  点击:(37)  评论:(0)  加入收藏
正则表达式 - 语法正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的...【详细内容】
2020-07-05  Tags: 正则表达式  点击:(53)  评论:(0)  加入收藏
▌简易百科推荐
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的...【详细内容】
2021-12-28  菜鸟学python    Tags:Python4   点击:(1)  评论:(0)  加入收藏
学习Python的初衷是因为它的实践的便捷性,几乎计算机上能完成的各种操作都能在Python上找到解决途径。平时工作需要在线学习。而在线学习的复杂性经常让人抓狂。费时费力且效...【详细内容】
2021-12-28  风度翩翩的Python    Tags:Python   点击:(1)  评论:(0)  加入收藏
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  IT资料库    Tags:Python 库   点击:(2)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  子冉爱python    Tags:Python   点击:(4)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  程序汪小成    Tags:Python入门   点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  编程啊青    Tags:Verilog   点击:(9)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  修道猿    Tags:Python   点击:(6)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  我头秃了    Tags:python   点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  程序员小新ds    Tags:python初   点击:(5)  评论:(0)  加入收藏
Hi,大家好。我们在接口自动化测试项目中,有时候需要一些加密。今天给大伙介绍Python实现各种 加密 ,接口加解密再也不愁。目录一、项目加解密需求分析六、Python加密库PyCrypto...【详细内容】
2021-12-21  Python可乐    Tags:Python   点击:(8)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条