python之re模块

本文介绍了Python的re模块,包括re模块的功能、使用步骤、简单应用示例和正则表达式字符串前的r前缀的含义。内容涵盖re模块的类、函数、标志位以及匹配、查找、替换和字符串分割的操作。文章还提供了多个实例,演示了如何使用re模块进行正则匹配和内容查找等操作,并解释了正则表达式字符串前的r前缀的作用,以解决字符串和正则表达式之间的冲突问题。
摘要由CSDN通过智能技术生成

本节内容


  1. re模块介绍
  2. 使用re模块的步骤
  3. re模块简单应用示例
  4. 关于匹配对象的说明
  5. 说说正则表达式字符串前的r前缀
  6. re模块综合应用实例
  7. 参考文档

提示: 由于该站对MARKDOWN的表格支持的不是很好,所以本文中的表格均以图片的形式提供,大家如果看着比较模糊,可以放大来看或下载图片在本地查看。

正则表达式(Regluar Expressions)又称规则表达式,在代码中常简写为REs,regexes或regexp(regex patterns)。它本质上是一个小巧的、高度专用的编程语言。 通过正则表达式可以对指定的文本实现
匹配测试、内容查找、内容替换、字符串分割 等功能。正则表达式的语法不是本节要讲的内容(关于正则表达式的详细介绍请参考另一篇博文《正则表达式的汇总》),本节主要介绍的是Python中是如何使用re模块来完成正则表达式的相关操作的。

一、re模块介绍


Python中的re模块提供了一个正则表达式引擎接口,它允许我们将正则表达式编译成模式对象,然后通过这些模式对象执行模式匹配搜索和字符串分割、子串替换等操作。re模块为这些操作分别提供了模块级别的函数以及相关类的封装。

1. re模块提供的类

Python中的re模块中最重要的两个类:

描述
Regular Expression Objects 正则表达式对象,用于执行正则表达式相关操作的实体
Match Objects 正则表达式匹配对象,用于存放正则表达式匹配的结果并提供用于获取相关匹配结果的方法

正则表达式对象中的方法和属性

通过re模块的compile()函数编译得到的正则表达式对象(下面用regex表示)支持如下方法:

参数说明:

  • string: 要匹配或处理的字符串
  • pos: 可选参数,表示从string字符串的哪个位置开始,相当于先对字符串做切片处理string[pos:]
  • endpos: 可选参数,表示到string字符串的哪个位置结束(不包含该位置)
  • maxsplit: regex.split()方法的可选参数,表示最大切割次数;默认值为0,表示能切割多少次就尽可能多的切割多少次
  • count: regex.sub()和regex.subn()方法的可选参数,表示最大替换次数;默认为0,表示能替换多少次就尽可能多的替换多少次
  • repl: sub和subn函数中的repl表示replacement,用于指定将匹配到的子串替换成什么内容,需要说明的是该参数的值可以是一个字符串,也可以是一个函数

说明: 如果指定了pos和endpos参数,就相当于在进行正则处理之前先对字符串做切片操作 string[pos, endpos],如rx.search(string, 5, 50)就等价于rx.search(string[5:50]),也等价于rx.search(string[:50], 5);如果endpos比pos的值小,则不会找到任何匹配。

匹配对象中的方法和属性

调用正则表达式对象的regex.match()、regex.fullmatch()和regex.search()得到的结果就是一个匹配对象,匹配对象支持以下方法和属性:

参数说明:

  • template: m.expand()方法中的template参数是一个模板字符串,这个字符串中可以使用分组对应的的数值索引进行后向引用(如:\1,\2)或命名后向引用(如\g<1>,\g<NAME>)来表示某个分组的占位符;m.expand()方法的执行过程实际上就是通过sub()方法把template字符串中的这些分组占位符用当前匹配对象中的数据进行替换。
  • default: m.groups()与m.groupdict()方法中的default都是为未匹配成功的捕获组提供默认匹配值的。
  • group: m.group()、m.start()、m.end()和m.span()方法中的group参数都表示要选择的分组索引值,1表示第一个分组,2表示第二个分组,依次类推,group参数的默认值是0,表示整个正则表达式所匹配的内容。

2. re模块提供的函数

re模块提供了以下几个模块级别的函数

将pattern参数只能是字符串;

  • string: 需要用正则表达式来匹配的字符串对象
  • flags: 一个标志位,它会影响正则表达式对象的匹配行为,可取值下面会介绍;但是有一点需要说明的是,只有当pattern参数是字符串时才能指定这个flags参数,否则会报错;如果pattren参数是一个正则表达式对象,则flags参数需要在调用re.compile()函数时指定。
  • repl: sub和subn函数中的repl表示replacement,用于指定将匹配到的子串替换成什么内容,需要说明的是该参数的值可以是一个字符串,也可以是一个函数
  • count: sub和subn函数中的count表示最多可替换次数
  • maxsplit: split函数中的maxsplit蚕食表示最大分隔次数

说明: 通过对比会发现,上面这些re模块级别的函数除了re.compile、re.purge和re.escape这几个函数外,其它函数名都与正则表达式对象支持的方法同名。实际上re模块的这些函数都是对正则表达式对象相应方法的封装而已,功能是相同的。只是少了对pos和endpos参数的支持,但是我们可以手动通过字符串切片的方式来达到相应的需求。个人认为,我们应该尽可能的使用模块级别的函数,这样可以增强代码的兼容性。

3. 标志位flags

由上面的描述可知,flags参数在上面这些模块函数中是要个可选参数,re模块中预定了该参数可取的值:

说明: 这些flag可以单独使用,也可以通过逻辑或操作符'|'进行拼接来联合使用。

二、使用re模块的步骤


我们有必要对re模块中所包含的类及其工作流程进行一下简单的、整体性的说明,这讲有利于我们对下面内容的理解。

1. 使用re模块进行正则匹配操作的步骤

  • 1)编写表示正则表达式规则的Python字符串str;
  • 2)通过re.compile()函数编译该Python字符串获得一个正则表达式对象(Pattern Object)p;
  • 3)通过正则表达式对象的p.match()或p.fullmatch()函数获取匹配结果--匹配对象(Match Object)m;
  • 4)通过判断匹配对象m是否为空可知是否匹配成功,也可以通过匹配对象m提供的方法获取匹配内容。

2. 使用re模块进行内容查找、替换和字符串分隔操作的步骤

  • 1)编写表示正则表达式规则的Python字符串str;
  • 2)通过re.compile()函数编译该Python字符串获得一个正则表达式对象(Pattern Object)p;
  • 3)通过正则表达式对象的p.search()或p.findall()或p.finditer()或p.sub()或p.subn()或p.split()函数完内容查找、替换和字符串分隔操作并获取相应的操作结果;

总结: 关于正则表达式的语法和编写示例请参考《正则表达式总结》)。根据上面的描述可知,将一个表示正则表达式的Python字符串编译成一个正则表达式对象是使用正则表达式完成相应功能的首要步骤,re模块中用于完成正则表达式编译功能的函数为re.compile()。

三、re模块简单应用示例


在上面的内容中,我们已经列出了re模块所提供的类,以及这些类的对象所支持的函数和属性,还有re模块所提供的模块级别的函数。这里我们要讨论的是怎样合理的使用这些方法和函数,换句话说就是在什么情况下使用这些方法和函数,以及如何使用的问题。我们之前说过,正则表达式主要可以用来提供以下几个功能:

  • 匹配测试
  • 子串/内容查找
  • 子串/内容替换
  • 字符串分割

下面我们就分别通过对这几个功能的实例实现对上面这些函数和方法以及参数和属性的使用做下说明和具体的解释。

1. 匹配测试

匹配测试,意思是通过特定的正则表达式对一个指定的字符串进行匹配来判断该字符串是否符合这个正则表达式所要求的格式。常见的使用场景举例:

  • 查看某个字符串(通常来自用户输入)是否是一个邮箱或电话号码
  • 用户注册时填写的用户名和密码是否符合指定需求

使用的函数或方法

通过re模块执行匹配测试时可以使用的函数或方法是:

  • re模块级别的match()和fullmatch()函数
  • 正则表达式对象的match()和fullmatch()方法

实例1

前面提到过,match()函数或方法只是匹配字符串的开始位置,而fullmatch匹配的是整个字符串;fullmatch()函数或方法就相当于给match()函数或方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值