python基础—正则表达式即re模块
正则表达式(regular expression),就是字符匹配模式,而这个匹配规则在我们写爬虫进行数据提取,或者进行数据可视化进行数据清洗时经常用到,多样化的匹配规则在复杂的字符的情况提取数据时助我们一臂之力;在Perl、java、C/C++等编程语言都支持;python是以re模块的形式支持的;
正则表达式的常见用途:
在模式字符串中根据需求提取子字符串;
字符串内某些字符或者指定字符串进行替换或者删除或者分离;
在用户输入用户名时判断输入字符串格式是否正确;
一,基础
re模块匹配经常用到的元字符和语法
字符型:
预义字符型:
数量字符型:
边界、逻辑或组匹配:
贪婪模式与非贪恋模式:
贪婪模式的量词也叫做匹配优先量词,主要包括: “{m,n}”、“{m,}”、“?”、“”和“+”;
在匹配优先量词后面加上“?”叫做忽略优先量词,主要包括:“{n}?”、“{m,n}?”、“?”和
“+?”;
贪婪模式:在匹配字符对象满足的情况下尽可能匹配多个字符,指被匹配优先量词修饰的字符串;
非贪婪模式:在匹配规则满足的情况下尽可能匹配少的字符,指被忽略优先量词匹配的字符串;
列个表帮助你深刻理解贪婪模式与非贪婪模式的区别:
说明:当字符串遍历到第二个时就已经满足匹配规则了,但是模式一是贪婪模式需要尽可能匹配多的字符,第三个后面已经没有能够满足匹配规则的字符了,所以在遍历到第3个就停下了结果即为:.*56.;而模式二为非贪婪模式即结果为:56.
匹配时出现的反斜杠的问题
在用正则匹配时,需要对于某些特殊字符进行转义,就比如‘baidu.com’,匹配时需要写成“baidu.com”;但是python字符中本身也用‘\’转义,所以需要写成‘baidu\.com’;为了在写匹配字符对象时避免‘\’出现程序问题,我们可以匹配时在字符串前面加一个字母r,转化为原字符串进行匹配,例如 r “baidu.com”;
二、re模板中常用到的函数
re.compile();
re.compile()将一个字符串编译成一个模式对象,便于直接利用search,findall,split等函数直接匹配与搜索或者分割;
re.compile()的原型:re.compile( pattern [, flags] )
pattern表示字符串匹配模式对象,flags表示修饰量词:例如:“*”、“+”;
compile函数的例子:re.compile(r"\d+") : 表示匹配连续多个数字;
compile还有一个参数flag可以设正则表达式修饰符,常用的修饰符如下:
对于re.X的解释,例如,图中两个正则表达式是等价的:
re.match()
match函数从字符串的头部开始匹配,当字符满足匹配模式对象时会返回一个正确对象(object),当不满足时则就会返回None;例子如下:
字符头部匹配成功:
字符串头部匹配失败
match还有几个命令,可以连续匹配多个组(用group(n)或者groups()表示),并且组之间的匹配内容用元组来表示:
match还有一些用来查找满足匹配某一组字符串起始、结尾的位置以及范围,使用方法如下:
re.search()
search在字符串的任一部位都可以进行匹配,与match相似如果在模式字符串第一次满足指定的匹配对象则返回一个object,若都不满足则返回None;当然可指定模式字符串的匹配起始位置;match、research、findall(后面需要介绍的函数)都可以不经过compile方法直接进行匹配;例子如下图:
re.findall()
findall也是对于字符串全部任意部位进行匹配,但是与search的主要区别:匹配组时search只返回满足匹配对象的第一个组,findall则返回所有满足匹配对象的组,而且findall没有group或者groups方法的应用,匹配的值可以直接返回;写个例子大家感受一下:
re.sub()
sub的原型:sub(pat,repl,string[,count=0]);用string中的pat用字符repl替换;
sub方法的目的:是用一个字符或字符串来替换模式字符串中某一字符或字符串,sub同样可以借用compile中的匹配对象,也可以直接进行匹配,使用方法如下:
re.split()
split方法的原型:split(pattern,string[,maxsplit = 0])
split作用:根据匹配分割字符对象把字符串分割成一个列表,例子如下:
参考链接 :
python基础—正则表达式即re模块! :https://mp.weixin.qq.com/s/KmiRLDXsIHRpF4qYNCG4UQ
python基础—正则表达式即re模块相关推荐
- Python基础语法(五)—常用模块和模块的安装和导入
Python基础语法(五)-常用模块的使用和模块的安装和导入,本文介绍的Python模块有:os.sys.time.datetime.random.pickle.json.hashlib.shutil ...
- Python基础(七)--模块和包
目录 Python基础(七)--模块和包 1 模块 1.1 什么是模块 1.2 模块的使用 1.3 模块的搜索路径 1.4 模块的缓存 2 包 2.1 什么是包 2.2 包的使用 3 常用模块 3.1 ...
- Python基础学习之 os 模块详解
Python基础学习之 os 模块详解 文章目录 Python基础学习之 os 模块详解 1. 路径操作 1.1 os.chdir(),切换当前工作目录: 1.2 os.getcwd(),返回工作目录 ...
- Python基础(12)--模块
本文地址:http://www.cnblogs.com/archimedes/p/python-modules.html,转载请注明源地址. 模块简介 如果你退出 Python 解释器重新进入,以前创 ...
- python基础—正则表达式
目录 1.正则表达式:☆ 1.1 正则写法快速入门: ① 常用正则符号:☆ 1.1.1 利用原生字符r"\()" 规则: ② 使用re模块实现正则表达式: [1]使用match( ...
- Python学习——正则表达式与re模块实现字符串计算器
学习了python的正则表达式后,一片懵逼,不知道干啥用的,也不知道咋用,只能放一些实例和正则表达式的规则以备后续查阅,希望在经过长时间的训练和使用后能对正则表达式有一个深刻的理解.什么是正则表达式呢 ...
- python爬虫 -- 正则表达式 与 Re模块的介绍
Regular Expression,正则表达式,一种使用表达式的方式对字符串进行匹配的语法规则. 爬虫中我们抓取到的网页源代码本质上就是一个超长的字符串,想从里面提取内容.用正则再合适不过了. 正则 ...
- Python高级——正则表达式与re模块
正则表达式 构成 原子(普通字符,如英文字符) 元字符(有特殊功用的字符) 模式修正字符 1.匹配单个字符 字符 功能 . 匹配任意1个字符(除了\n) [ ] 匹配[ ]中列举的字符 \d 匹配数字 ...
- python 基础 - 4.15 re模块
请从以下文件里取出所有的手机号 姓名 地区 身高 体重 电话 况咏蜜 北京 171 48 13651054608 王心颜 上海 169 46 13813234424 马纤羽 深圳 173 50 137 ...
最新文章
- sleep方法和wait方法的区别
- 【网搜】禁止 number 输入非数字(Android仍有问题)
- 为什么要用dubbo,dubbo和zookeeper关系
- ngRx 官方示例分析 - 4.pages
- framebuffer驱动详解3——framebuffer驱动分析(driver和device的配套查找)
- MAC下ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
- ocp007 题库解析(1-15)
- throw er; // Unhandled 'error' event 和Error: listen EADDRNOTAVAIL 192.168.0.109:8081
- ADB下载及常用命令
- 关于安控RTU和宏电DTU的通讯设置
- 云平台仿真框架cloudsim介绍
- Live800:企业必修课|新时代的全渠道营销解析(上)
- (八)苏世民:我的经验和教训:决策(567)
- LaTex数学之积分、求和和极限
- android 仿飞猪日历,vue 日期选择 类似飞猪
- Java导出大批量数据(文件格式篇xls,xlsx,csv)
- 史上最全搭建MAVEN私服上传并使用JAR包教程
- java.sql.SQLException: Subquery returns more than 1 row
- Label的属性、事件、方法
- Adobe Aquire Macromedia
热门文章
- 票据图片复杂表格框识别(票据单元格切割)
- flex socket java_使用Java编写Socket服务器,并且与Flex通信(二)
- linux 防ddos攻击软件,linux系统下免费防DDOS CC攻击脚本,有效减轻服务器压力 【转】...
- gradle拷贝静态资源文件_android-Gradle Copy任务不会复制文件
- 软中断网卡处理Linux高性能外部设备处理机制SMP
- 11年写的一篇文章----智能终端安全现状及前景展望
- glPushMatrix()和glPopMatrix()以及glLoadIdentity()的理解
- 新Linux木马发现:每30秒截图并用麦克风录音
- 为什么科学家这么痴迷于研究僵尸?
- velocity map list 数组操作