Python 正则表达式

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。

re 模块使 Python 语言拥有全部的正则表达式功能。

compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。

re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。

本章节主要介绍 Python 中常用的正则表达式处理函数:

re.match函数

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

函数语法

re.match(pattern, string, flags=0)

函数参数说明:

参数 描述
pattern 匹配的正则表达式
string 要匹配的亨符串。
flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

匹配成功re.match方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

匹配对象方法 描述
group(num=0) 匹配的整个表达式的字符串,group()可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups() 返回—个包含所有小组字符串的元组,从1到所含的小组号。

实例

#!/usr/bin/pythonimport re
print(re.match('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.match('com', 'www.runoob.com'))         # 不在起始位置匹配

以上实例运行输出结果为:

(0, 3)
None

实例

#!/usr/bin/python3
import reline = "Cats are smarter than dogs"
# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
# (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)if matchObj:print ("matchObj.group() : ", matchObj.group())print ("matchObj.group(1) : ", matchObj.group(1))print ("matchObj.group(2) : ", matchObj.group(2))
else:print ("No match!!")

以上实例执行结果如下:

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

re.search方法

re.search 扫描整个字符串并返回第一个成功的匹配。

函数语法:

re.search(pattern, string, flags=0)

函数参数说明:

参数 描述
pattern 匹配的正则表达式
string 要匹配的字符串。
flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

匹配成功re.search方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

匹配对象方法 描述
group(num=0) 匹配的整个表达式的字符串,group()可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups() 返回一个包含所有小组字符串的元组,从1到所含的小组号。

实例

#!/usr/bin/python3import reprint(re.search('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.search('com', 'www.runoob.com').span())         # 不在起始位置匹配

以上实例运行输出结果为:

(0, 3)
(11, 14)

实例

#!/usr/bin/python3import reline = "Cats are smarter than dogs"searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)if searchObj:print ("searchObj.group() : ", searchObj.group())print ("searchObj.group(1) : ", searchObj.group(1))print ("searchObj.group(2) : ", searchObj.group(2))
else:print ("Nothing found!!")

以上实例执行结果如下:

searchObj.group() :  Cats are smarter than dogs
searchObj.group(1) :  Cats
searchObj.group(2) :  smarter

re.match与re.search的区别

re.match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None,而 re.search 匹配整个字符串,直到找到一个匹配。

实例

#!/usr/bin/python3import reline = "Cats are smarter than dogs"matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:print ("match --> matchObj.group() : ", matchObj.group())
else:print ("No match!!")matchObj = re.search( r'dogs', line, re.M|re.I)
if matchObj:print ("search --> matchObj.group() : ", matchObj.group())
else:print ("No match!!")

以上实例运行结果如下:

No match!!
search --> matchObj.group() :  dogs

关注小廖,学习更多Python干货!

跟小廖一起学习Python正则表达式!相关推荐

  1. 小马同学 学习python实操的第一天

    学习python实操的第一天 第一个实操案例 任务1:向文件输出"一段属于你自己的话" ##方法一 fp= open('d:/test.txt','w') ##open('文件存储 ...

  2. 小猿圈学习Python字符串操作--字符串分割函数

    对于长字符串,我们一般要怎么处理呢?除了切片,但是切片太麻烦了.python为我们提供了字符串切割函数,它不仅可以通过指定字符切割,也可以去除空格符哦.下面就看一下小猿圈Python讲师是怎么介绍Py ...

  3. 【廖雪峰】python正则表达式

    文章目录 基础 进阶 re模块 切分字符串 分组 贪婪匹配 编译 小结 练习 基础 字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在.比如判断一个字符串是否是合法的Emai ...

  4. python小程序-10个Python练手小程序,学习python的很好的资料

    [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. ...

  5. 对着爬虫网页HTML学习Python正则表达式re

    1.正则表达式初探 2.用正则表达式匹配更多模式 2.1.利用括号()进行分组 2.2.利用管道|匹配多个分组 2.3.用问号?实现可选匹配 2.4.用星号*实现0次或多次 2.5.用加号+实现1次或 ...

  6. 对着爬虫网页HTML学习Python正则表达式

    文章目录 1.正则表达式初探 2.用正则表达式匹配更多模式 2.1.利用括号()进行分组 2.2.利用管道|匹配多个分组 2.3.用问号?实现可选匹配 2.4.用星号*实现0次或多次 2.5.用加号+ ...

  7. 学习python 正则表达式——与你同行!

    正则表达式定义   又称为规则表达式,是一个特殊的字符序列,利用事先定义好的一些特定字符以及它们的组合组成一个'规则',检查一个字符串是否与这种规则匹配来实现对字符的检索.过滤.匹配.替换.正则表达式 ...

  8. 学python看小甲鱼还是黑马_P1 跟着小甲鱼(2019年新版)学习Python的第一天

    P1 跟着小甲鱼(2019年新版)学习Python的第一天 (如有侵权,请联系小up删除) 作为一个python的初学者,一直没有毅力好好学习一门编程语言,想利用这个方法监督自己,跟着小甲鱼一起学习p ...

  9. 偶然发现一个学习python的好地方

    大家好,今天推荐一个我的在学习python路上结识的好朋友:才哥. 才哥是枚游戏运营,为了高效的处理游戏运营中的数据分析相关工作,自学python,致力于技术让工作更轻松. 才哥乐于分享,他将自己学习 ...

最新文章

  1. 一文看懂 Bahdanau 和 Luong 两种 Attention 机制的区别
  2. 突破对银河系的传统认知 大量超高能宇宙加速器被发现
  3. qprocess调用linux命令
  4. 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 yarn 提交过程解析
  5. 网上骗子太多了:关于冒充儿童医院网站的例子
  6. 2016.03.18 近日买房以及学习事项
  7. C++11新特性之std::bind()
  8. Adobe Dreamweaver 2021下载与安装教程
  9. 【常用软件下载地址】java开发官方资源下载网址大全(持续更新)
  10. 利用WPF做出的简单界面布局一
  11. IOS越狱运行Linux,iOS 13.4.1 Linux 简易越狱,重启就能打开
  12. 一个四维混沌吸引子曲线(matlab完整代码)
  13. Node学习 | Day04 数据库与身份验证(数据库的基本概念、安装并配置MySQL、MySQL的基本使用、在项目中操作MySQL、前后端的身份验证)
  14. win10子系统ubuntu文件夹位置_Win10 Linux子系统任何直接访问文件
  15. HTML5----响应式(自适应)网页设计
  16. 解决H5安卓自带浏览器video层级问题
  17. 赶紧来修炼内功发~内存函数详解大全-memcpy、memmove、memcmp
  18. H5/APP客服端源码/uniapp在线客服系统源码开源了,全源码代码解读及发行安装教程...
  19. Redis服务器集群搭建
  20. 创造与魔法java语言_《创造与魔法》食谱大全

热门文章

  1. shell下将文件中的分隔符从‘\t‘转换成‘,‘
  2. 计算map代码_大数据系列之计算框架MapReduce
  3. 实战 | 离线搭建CDH6.20平台 踩坑实录
  4. android 底部停靠 底部吸附_android让xml布局的底部跟随软键盘
  5. 记录一则expdp任务异常处理案例
  6. 数据库每日一题 2020.04.29
  7. 动手为王:由一条UPDATE语句引发的一波三折深入实践(含PPT)
  8. 分析师机构发布中国低代码平台现状分析报告,华为云AppCube为数字化转型加码
  9. 云图说|初识云数据库GaussDB(for Redis)
  10. 终于搞懂了Python模块之间的相互引用问题