前言

使用正则表达式进行匹配,可以直接调用模块级函数,如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模块(三)...相关推荐

  1. inner join 重复数据_Ramp;Python Data Science 系列:数据处理(2)

    承接R&Python Data Science 系列:数据处理(1)继续介绍剩余的函数. 1 衍生字段函数 主要有两个函数,mutate()和transmute(),两个函数在Python和R ...

  2. python findall函数_python正则表达式之中的findall函数是什么?

    在这篇文章之中我们来了解一下关于python正则表达式的相关知识,有些朋友可能是刚刚接触到python这一编程语言,对这一方面不是特别的了解,在接下来这篇文章将会来带大家来了解关于正则表达式中的pyt ...

  3. python 全栈开发,Day136(爬虫系列之第3章-Selenium模块)

    python 全栈开发,Day136(爬虫系列之第3章-Selenium模块) 一.Selenium 简介 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直 ...

  4. python findall函数用法_Python--re模块的findall等用法

    1)正则表达式含义 . # 点可代表一切字符 \ # 起转义作用 [...] # 指代方括号中的任意字符 \d # 指代数字0-9 \D # 指代非数字 \s # 指代一切空格,包括tab制表符.空格 ...

  5. python findall函数_Python正则表达式

    什么是正则表达式 •正则表达式是字符串处理的有力工具,比字符串自身提供的方法提供了更强大的处理功能. •例如判断一个字符串是否是合法的Email地址,可以通过构造一个规则(正则表达式),去判断字符串是 ...

  6. c++ 多个字符串排序_RPython Data Science系列:数据处理(5)--字符串函数基于R(一)

    ​0 前言 数据根据结构可以分为结构化数据.非结构化数据和半结构化数据,前面介绍的数据处理函数针对于结构化数据,而字符串通常包含非结构化或者半结构化数据,这一部分介绍一下R和Python中的字符串函数 ...

  7. 【Python常用函数】一文让你彻底掌握Python中的pivot_table函数

    任何事情都是由量变到质变的过程,学习Python也不例外.只有把一个语言中的常用函数了如指掌了,才能在处理问题的过程中得心应手,快速地找到最优方案.本文和你一起来探索Python中的pivot_tab ...

  8. python定义函数名typo错误_17个新手常见Python运行时错误

    当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂.这里列出了常见的的一些让你程序 crash 的运行时错误. 1)忘记在if,elif,else,for,while,cl ...

  9. python def函数报错详解_JSer 快速入门 Python 之函数详解

    前一篇文章,用一天的时间,通过与 JavaScript 做对比的方式,快速领略了 Python 全貌. 梳理了那么多,若忽略细节差异,两门语言只有两个重要差异: 1.书写风格上大相同 2.功能覆盖上, ...

最新文章

  1. 计算机右键管理中没有用户管理,我的电脑右键菜单中没有管理选项如何解决? 我的电脑右键菜单中没有管理选项解决的方法有哪些?...
  2. 支付宝服务窗API接口开发php版本
  3. 如何理解左操作数必须为左值
  4. 《网络安全原理与实践》一2.1 安全区介绍
  5. 使用XmlTextWriter生成XML文件的方法
  6. 实战Zabbix-Server数据库MySQL的libdata1文件过大
  7. 关于MVC与三层架构
  8. 【重识 HTML + CSS】CSS 特性
  9. 线程安全问题的本质详解: 原子性、有序性、可见性
  10. java 管理系统 注释_员工管理系统--带注释--oracle系统--java项目
  11. ipv6 华为交换机 路由配置_华为路由器单臂路由的配置方法及小案例
  12. 类似MSN的消息提示
  13. JavaScript的特效
  14. 连续时间与Balck-Scholes公式(上)(偏微分)
  15. mysql还原数据库非常慢_mysql还原数据库慢
  16. CAN唤醒硬件方案和软件分析
  17. 8. 查询表orders——统计各类商品的销售量
  18. Android专业DJ,著名音乐游戏《DJ英雄》登陆Android Market
  19. stm32驱动ili9486液晶显示屏
  20. d3.js v5 数据加载

热门文章

  1. hls之m3u8、ts流格式详解
  2. git diff old mode 100644 new mode 100755
  3. Storm 1.1.0 集群安装
  4. Hadoop 2.7集群环境搭建
  5. centos7 redis5.0以前版本 集群部署示例 - 第一篇
  6. Kafka史上最详细总结
  7. 大剑无锋之TCP和HTTP的区别【面试推荐】
  8. no.2_用绳子计时15分钟
  9. leetcode 115. Distinct Subsequences Hard | 115. 不同的子序列(动态规划)
  10. JVM从入门到精通(三):热加载的实现原理,Java内存模型,缓存行,指令重排,合并写技术等