python findall函数_Ramp;Python Data Science系列:数据处理(11)Python正则表达式re模块(三)...
前言
使用正则表达式进行匹配,可以直接调用模块级函数,如match()、search()、findall()等,函数第一个参数是匹配的正则表达式,第二个参数则为要匹配的字符串。也可以使用re.compile()先将正则表达式编译成RegexObject对象,然后再调用RegexObject对象的方法,参数为要匹配的字符串。例如:
re.search(r'flash', 'Flash_WorkingNotes', re.I).group()
等价于
p = re.compile(r'flash', re.I)
p.search('Flash_WorkingNotes').group()
如果匹配的正则表达式只用一次,模块级函数使用起来很方便;若项目中包含多个正则表达式或者一个正则表达式被多次使用,编译成RegexObject对象更方便一些。以下内容,先编译成正则表达式对象,然后再调用这些对象的方法。
5.2.3 RegexObject的方法和MatchObject的方法
re模块提供了一个正则表达式引擎接口,可以将正则表达式编译成对象并用它们进行匹配。使用re.compile()将正则表达式编译成RegexObject对象,有对象就有方法可以调用,RegexObject对象常用方法有match()、search()、findall()、finditer()、split()、sub()以及subn()。
match()和search()匹配成功的话返回一个MatchObject实例,findall()、split()、sub()以及subn()返回一个列表,finditer()返回一个迭代器。
- match()函数
match()函数检查RE是否在字符串开始处匹配,match()函数只返回一次成功的匹配,从0开始,如果不是从0匹配成功,返回None。如果匹配成功,返回一个MatchObject 对象,可以通过group方法获取匹配成功的整个字符串。
1 匹配成功
p = re.compile('Flash', re.I)
p.match('flash workingnotes')
匹配成功的话,返回一个MatchObject对象,可以调用MatchObject的方法。
2 使用group()函数返回匹配成功的整个字符串
p = re.compile('Flash', re.I)
p.match('flash workingnotes').group()
3 使用start()返回匹配开始的位置
p = re.compile('Flash', re.I)
p.match('flash workingnotes').start()
4 使用end()返回匹配结束的位置
p = re.compile('Flash', re.I)
p.match('flash workingnotes').end()
5 使用span()返回一个元组包含匹配(开始,结束)的位置
p = re.compile('Flash', re.I)
p.match('flash workingnotes').span()
6 匹配失败
p = re.compile('Flash', re.I)
print(p.match('workingnotes flash'))
- search()函数
search()函数检查整个字符串,匹配成功,返回一个匹配对象MatchObject,没有匹配成功返回None
1 匹配成功
p = re.compile('Flash', re.I)
print(p.search('workingnotes flash'))
2 使用group()函数返回匹配成功的整个字符串
p = re.compile('Flash', re.I)
print(p.search('workingnotes flash').group())
3 使用start()返回匹配开始的位置
p = re.compile('Flash', re.I)
print(p.search('workingnotes flash').start())
4 使用end()返回匹配结束的位置
p = re.compile('Flash', re.I)
print(p.search('workingnotes flash').end())
5 使用span()返回一个元组包含匹配(开始,结束)的位置
p = re.compile('Flash', re.I)
print(p.search('workingnotes flash').span())
6 匹配失败
p = re.compile('Flash', re.I)
print(p.search('workingnotes fash'))
- findall()函数
findall()函数找到匹配成功的所有子串,并把它们作为一个列表返回,若没有匹配成功,返回空列表
1 匹配成功
p = re.compile('Flash', re.I)
print(p.findall('flash workingnotes Flash Workingnotes'))
编译正则表达式的时候,使用标志re.I,匹配时候不区分大小写,所以成功匹配flash和Flash。
2 匹配失败
p = re.compile('Flash', re.I)
print(p.findall('flah workingnotes Flah Workingnotes'))
- finditer()函数
finditer()函数找到匹配成功的所有子串,并把它们作为一个迭代器返回
p = re.compile('Flash', re.I)
print(p.finditer('flash workingnotes Flash Workingnotes'))
p = re.compile('Flash', re.I)
p1 = p.finditer('flash workingnotes Flash Workingnotes')
for match in p1:
print(match.group())
- split()函数
split()函数基于正则表达式的模式分隔字符串,通过参数max指定最大分割数。
如果找不到匹配的字符串的话,不进行分割。
1 使用非字母数字字符分割字符串
p = re.compile(r'W+')
p.split('Flash,Workingnotes.flash+Workings FlashWorkingnotes')
2 使用非字母数字字符分割字符串,限制最大分割次数为2
p = re.compile(r'W+')
p.split('Flash,Workingnotes.flash+Workings FlashWorkingnotes', 2)
3 匹配不到
p = re.compile(r'd')
p.split('Flash,Workingnotes.flash+Workings FlashWorkingnotes', 2)
- sub()函数和subn()函数
sub()函数和subn()函数用于搜索和替换,sub()函数找到匹配成功的所有子串,并将其用一个不同的字符串替换;subn()函数找到匹配成功的所有子串,并将其用一个不同的字符串替换,并且返回新的字符串和替换次数的元组。参数count可用于指定最大替换的次数。
1 使用gmy替换F(f)lash
p = re.compile(r'Flash', re.I)
p.sub('gmy', ('flash workingnotes Flash Workingnotes'))
2 使用gmy替换F(f)lash,替换次数为1次
p = re.compile(r'Flash', re.I)
p.sub('gmy', ('flash workingnotes Flash Workingnotes'), 1)
3 subn()函数与sub()函数一样,返回的是包含新字符串和替换执行次数的元组
p = re.compile(r'Flash', re.I)
p.subn('gmy', ('flash workingnotes Flash Workingnotes'))
p = re.compile(r'Flash', re.I)
p.subn('gmy', ('flash workingnotes Flash Workingnotes'),1)
6 总结
用了三部分介绍了Python之正则表达式re模块,这里只是抛砖引玉,选择性的介绍部分内容,没有介绍的可以参考https://docs.python.org/zh-cn/3/library/re.html。按照计划,后面进入到可视化内容的介绍。
关于作者:从事风控方面工作,数据科学爱好者,微信公众号WorkingNotes,欢迎交流。
python findall函数_Ramp;Python Data Science系列:数据处理(11)Python正则表达式re模块(三)...相关推荐
- inner join 重复数据_Ramp;Python Data Science 系列:数据处理(2)
承接R&Python Data Science 系列:数据处理(1)继续介绍剩余的函数. 1 衍生字段函数 主要有两个函数,mutate()和transmute(),两个函数在Python和R ...
- python findall函数_python正则表达式之中的findall函数是什么?
在这篇文章之中我们来了解一下关于python正则表达式的相关知识,有些朋友可能是刚刚接触到python这一编程语言,对这一方面不是特别的了解,在接下来这篇文章将会来带大家来了解关于正则表达式中的pyt ...
- python 全栈开发,Day136(爬虫系列之第3章-Selenium模块)
python 全栈开发,Day136(爬虫系列之第3章-Selenium模块) 一.Selenium 简介 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直 ...
- python findall函数用法_Python--re模块的findall等用法
1)正则表达式含义 . # 点可代表一切字符 \ # 起转义作用 [...] # 指代方括号中的任意字符 \d # 指代数字0-9 \D # 指代非数字 \s # 指代一切空格,包括tab制表符.空格 ...
- python findall函数_Python正则表达式
什么是正则表达式 •正则表达式是字符串处理的有力工具,比字符串自身提供的方法提供了更强大的处理功能. •例如判断一个字符串是否是合法的Email地址,可以通过构造一个规则(正则表达式),去判断字符串是 ...
- c++ 多个字符串排序_RPython Data Science系列:数据处理(5)--字符串函数基于R(一)
0 前言 数据根据结构可以分为结构化数据.非结构化数据和半结构化数据,前面介绍的数据处理函数针对于结构化数据,而字符串通常包含非结构化或者半结构化数据,这一部分介绍一下R和Python中的字符串函数 ...
- 【Python常用函数】一文让你彻底掌握Python中的pivot_table函数
任何事情都是由量变到质变的过程,学习Python也不例外.只有把一个语言中的常用函数了如指掌了,才能在处理问题的过程中得心应手,快速地找到最优方案.本文和你一起来探索Python中的pivot_tab ...
- python定义函数名typo错误_17个新手常见Python运行时错误
当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂.这里列出了常见的的一些让你程序 crash 的运行时错误. 1)忘记在if,elif,else,for,while,cl ...
- python def函数报错详解_JSer 快速入门 Python 之函数详解
前一篇文章,用一天的时间,通过与 JavaScript 做对比的方式,快速领略了 Python 全貌. 梳理了那么多,若忽略细节差异,两门语言只有两个重要差异: 1.书写风格上大相同 2.功能覆盖上, ...
最新文章
- 计算机右键管理中没有用户管理,我的电脑右键菜单中没有管理选项如何解决? 我的电脑右键菜单中没有管理选项解决的方法有哪些?...
- 支付宝服务窗API接口开发php版本
- 如何理解左操作数必须为左值
- 《网络安全原理与实践》一2.1 安全区介绍
- 使用XmlTextWriter生成XML文件的方法
- 实战Zabbix-Server数据库MySQL的libdata1文件过大
- 关于MVC与三层架构
- 【重识 HTML + CSS】CSS 特性
- 线程安全问题的本质详解: 原子性、有序性、可见性
- java 管理系统 注释_员工管理系统--带注释--oracle系统--java项目
- ipv6 华为交换机 路由配置_华为路由器单臂路由的配置方法及小案例
- 类似MSN的消息提示
- JavaScript的特效
- 连续时间与Balck-Scholes公式(上)(偏微分)
- mysql还原数据库非常慢_mysql还原数据库慢
- CAN唤醒硬件方案和软件分析
- 8. 查询表orders——统计各类商品的销售量
- Android专业DJ,著名音乐游戏《DJ英雄》登陆Android Market
- stm32驱动ili9486液晶显示屏
- d3.js v5 数据加载
热门文章
- hls之m3u8、ts流格式详解
- git diff old mode 100644 new mode 100755
- Storm 1.1.0 集群安装
- Hadoop 2.7集群环境搭建
- centos7 redis5.0以前版本 集群部署示例 - 第一篇
- Kafka史上最详细总结
- 大剑无锋之TCP和HTTP的区别【面试推荐】
- no.2_用绳子计时15分钟
- leetcode 115. Distinct Subsequences Hard | 115. 不同的子序列(动态规划)
- JVM从入门到精通(三):热加载的实现原理,Java内存模型,缓存行,指令重排,合并写技术等