此模块提供与Perl中类似的正则表达式匹配操作。

要搜索的模式和字符串都可以是Unicode字符串(str)以及8位字符串(字节)。但是,Unicode字符串和8位字符串不能混合:也就是说,不能将Unicode字符串与字节模式匹配,反之亦然;类似地,当请求替换时,替换字符串必须与模式和搜索字符串的类型相同。

正则表达式使用反斜杠字符('\')来表示特殊形式,或者允许在不调用特殊含义的情况下使用特殊字符。这与Python在字符串文本中使用相同的字符来实现相同的目的相冲突;例如,要匹配文本反斜杠,可能必须将“\\\\\”写入模式字符串,因为正则表达式必须是\\,并且每个反斜杠必须在正则Python字符串文本中表示为\\。另外,请注意Python在字符串文本中使用反斜杠的任何无效转义序列现在都会生成一个DeprecationWarning,将来它将成为一个SyntaxError。即使它是正则表达式的有效转义序列,也会发生这种行为。

解决方案是将Python的原始字符串表示法用于正则表达式模式;在前缀为“r”的字符串文本中,反斜杠不会以任何特殊方式处理。所以r“\n”是一个包含“\”和“n”的双字符字符串,而“\n”是一个包含换行符的单字符字符串。通常,模式将使用这个原始字符串表示法在Python代码中表示。

需要注意的是,大多数正则表达式操作都可以作为模块级函数和已编译正则表达式的方法使用。这些函数是快捷方式,不需要您首先编译regex对象,但会丢失一些微调参数。

第三方regex模块,它有一个与标准库re模块兼容的API,但是提供了额外的功能和更全面的Unicode支持。

>>> import re
>>> dir(re)
['A', 'ASCII', 'DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE', 'M', 'MULTILINE',
'Match', 'Pattern', 'RegexFlag', 'S', 'Scanner', 'T', 'TEMPLATE', 'U', 'UNICODE',
'VERBOSE', 'X', '_MAXCACHE', '__all__', '__builtins__', '__cached__', '__doc__',
'__file__', '__loader__', '__name__', '__package__', '__spec__', '__version__', '_cache',
'_compile', '_compile_repl', '_expand', '_locale', '_pickle', '_special_chars_map',
'_subx', 'compile', 'copyreg', 'enum', 'error', 'escape', 'findall', 'finditer',
'fullmatch', 'functools', 'match', 'purge', 'search', 'split', 'sre_compile', 'sre_parse',
'sub', 'subn', 'template']
>>> re.__all__
['match', 'fullmatch', 'search', 'sub', 'subn', 'split', 'findall', 'finditer', 'compile',
'purge', 'template', 'escape', 'error', 'Pattern', 'Match', 'A', 'I', 'L', 'M', 'S', 'X',
'U', 'ASCII', 'IGNORECASE', 'LOCALE', 'MULTILINE', 'DOTALL', 'VERBOSE', 'UNICODE']

查找匹配函数实例

re.search() 查找第一个匹配串
原型:re.search(pattern, string, flags)
    第一个参数是正则表达式,如果匹配成功,则返回一个Match,否则返回一个None;
    第二个参数表示要匹配的字符串;
    第三个参数是匹配方式标记。

>>> import re
>>> strL='1:Java 2:Python 3:C++ 4:Delphi 5:Vba'
>>> str1='Python'
>>> r=re.search(str1,strL)
>>> r
<re.Match object; span=(9, 15), match='Python'>
>>> r.span()
(9, 15)
>>> strL[9:15]==str1
True
>>> 

re.match() 从串首开始匹配到第一个匹配串
原型:re.match(pattern, string, flags) 参数说明与search()的相同

>>> import re
>>> strL='1:Java 2:Python 3:C++ 4:Delphi 5:Vba'
>>> r=re.match(str1,strL)
>>> r
>>> str2='1.Java'
>>> r=re.match(str2,strL)
>>> r
<re.Match object; span=(0, 6), match='1:Java'>
>>> r.span()
(0, 6)
>>> r.span()[0]==0
True
>>> strL[0:6]==str2
True
>>>

search()和match() 的区别
后者只从字串的第一个字符开始匹配,即它的非None返回值的span()[0]恒等于0。

>>> help(re.match)
Help on function match in module re:match(pattern, string, flags=0)Try to apply the pattern at the start of the string, returninga Match object, or None if no match was found.>>> help(re.search)
Help on function search in module re:search(pattern, string, flags=0)Scan through string looking for a match to the pattern, returninga Match object, or None if no match was found.

re.Match类、方法

.span() .group() .groups() ...

class Match(builtins.object)
   The result of re.match() and re.search().
   Match objects always have a boolean value of True.

Methods defined here:

span(self, group=0, /)
    For match object m, return the 2-tuple (m.start(group), m.end(group)).

group(...)
     group([group1, ...]) -> str or tuple.
     Return subgroup(s) of the match by indices or names.
     For 0 returns the entire match.

groups(self, /, default=None)
     Return a tuple containing all the subgroups of the match, from 1.
     default
     Is used for groups that did not participate in the match.

...... ......

实例:

>>> import re
>>> from urllib import request
>>> data=request.urlopen("http://www.baidu.com/").read().decode()
>>> pat=r'<title>(.*?)</title>'
>>> result=re.search(pat,data)
>>> result
<re.Match object; span=(940, 964), match='<title>百度一下,你就知道</title>'>
result.span()
(940, 964)
>>> result.group()
'<title>百度一下,你就知道</title>'
>>> result.groups()
('百度一下,你就知道',)

flags 匹配方式标记参数
用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

A  ASCII                对于字符串模式,使\w、\w、\b、\b、\d、\d匹配相应的ASCII字符类别(而不是整个Unicode类别,这是默认设置)。
I  IGNORECASE  对于字节模式,此标志是唯一可用的行为,无需指定。
L  LOCALE           执行不区分大小写的匹配。
M  MULTILINE     使\w、\w、\b、\b依赖于当前区域设置。
                             “^”匹配行的开头(换行后)以及字符串。
                             “$”匹配行的结尾(在换行之前)以及字符串的结尾。
S DOTALL          “.”完全匹配任何字符,包括换行符。
X VERBOSE      忽略空白和注释以获得更好看的RE。
U UNICODE       仅用于兼容性。忽略字符串模式(这是默认值),禁止字节模式

注:每个标记参数都有一个全称和一个单个字母的简称: re.A==re.ASCII, re.I==re.IGNORECASE,...;且A、 L和U是互斥的。除purge和escape之外的每个函数都可以采用可选的“flags”参数由以上一个或多个模块常数组成,并用“|”连接。

flags参数实例:

>>> import re
>>> strL='1:Java 2:Python 3:C++ 4:Delphi 5:Vba'
>>> str3='1:java'
>>> r=re.match(str3,strL)
>>> r
>>> #默认标记为re.A区分大小写,所以匹配不到返回None
>>> r=re.match(str3,strL,re.I)
>>> r
<re.Match object; span=(0, 6), match='1:Java'>
>>> #第三个参数使用re.I标记,就能忽略大小写进行匹配

问题引入:

以上实例中都是查找或匹配单个字串,这种任务字符串本身就有操作函数,如:strL.find('Python')。

如果要找一类符合某个特征的子串,字符串方法.find()就力不从心了,要用其他代码辅助才能实现。

一个简单的类比,就如文件中可以用通用符*和?一样,dir A*.txt 列出A字母开头的所有文本文件。

问题一:列出字符串strL中的数字

未完待续。。。持续更新中...

Python re模块 —— 从零基础开始入门正则表达式相关推荐

  1. python海龟教程_Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 7. 条件循环...

    条件循环能够让程序在条件成立时(即为真时)重复执行循环体中的语句.如果条件一直成立(即永远不会为假),则循环会一直进行下去,不会停止.如果初始时,条件不成立,则循环 1 次也不会执行.Python 中 ...

  2. python def 识别print_Python零基础快速入门(一):print()函数与变量

    第1节课程大纲 一.print()函数与变量 1.print()函数 2.转义字符 3.变量与赋值 4.附录:有趣的代码 二.课后练习 三.整体学习内容 一.print()函数与变量 1.1 prin ...

  3. 零基础SSM入门教程(0)--教程背景与目录

    点此查看 零基础JavaWeb全栈文章目录及源码下载 1. 背景 本教程的出发点是写一个比较条理,比较全面的SSM系列教程,首先造福自己.理顺自己的知识体系,然后也造福大众,因为网上现存的资源相对比较 ...

  4. 入门Python难不难?零基础到底要怎么学Python?

    近几年的Python编程发展得非常好,又因为人工智能的发展而发展.入门Python难不难?零基础到底要怎么学Python?本文,小分享入门Python需要掌握的知识. 1.数据库:Python在数据库 ...

  5. 【Python零基础快速入门系列 | 03】AI数据容器底层核心之Python列表

    • 这是机器未来的第7篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/124957520 <Python零基础快速入门 ...

  6. 【Python零基础快速入门系列 | 07】浪漫的数据容器:成双成对之字典

    这是机器未来的第11篇文章 原文首发链接:https://blog.csdn.net/RobotFutures/article/details/125038890 <Python零基础快速入门系 ...

  7. Python五大主要用途+零基础基础入门全攻略

    Python可以做什么? Python的热度毋庸置疑,现在国内,不仅考国家二级计算机证需要学习Python,它甚至出现在了小学生的教材里. 那么高度如此高涨的Python,都可以用来做什么呢? 目前来 ...

  8. 视频教程-8小时Python零基础轻松入门-Python

    订阅后:请点击此处观看视频课程 视频教程-8小时Python零基础轻松入门-Python 学习有效期:永久观看  学习时长: 525分钟  学习计划:9天 难度:低 「口碑讲师带队学习,让你的问题不过 ...

  9. Python 3.X 完全零基础入门精讲 全套视频教程

    简介 零基础小白快速学程序员大爱语言――Python,易学易用易就业!!! 目标人群:熟悉电脑基本操作,编程零基础或已具备Python或其它编程语言的人群. 课程目标:绝对零基础Python3.x 入 ...

最新文章

  1. ExtJS 4.2菜单
  2. java返回值变为文件_Java 文件操作-File
  3. 计算机软件名称用什么符号,[计算机软件及应用]第九章符号表.ppt
  4. mongodb和SQL语句对应查找表
  5. 6 追前沿,领略SET化架构衍化与设计
  6. RN学习笔记01:概述、特点与环境搭建
  7. 命运由我们自己抉择!
  8. TOGAF9.2企业架构师考试小记
  9. 大数据时代下,数据感知在数据质量管理系统中的应用
  10. 机器人高速切削加工多种应用图例
  11. 想系统的学习一下项目管理,有什么好的书籍推荐吗?
  12. 我的单片机固件被人给破解了
  13. 《Spring实战》读书笔记
  14. 第02章 前馈神经网络
  15. ios appstore 审核 Guideline 5.2.2 资讯类APP解决方案
  16. 问题解决:系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的about_Execution_Policies
  17. Scrum立会报告+燃尽图(Beta阶段第二周第三次)
  18. Mac M2芯 超详细k8s集群实战 - kubeadm
  19. 全球及中国氢燃料电池汽车行业销售规模与运营前景展望报告2022版
  20. 戴尔m520的服务器型号,Dell服务器PowerEdge M520

热门文章

  1. AVPro批量制作视频缩略图
  2. cie1931 python绘制_科学网—gnuplot与CIE1931 XYZ三刺激值曲线 - 范学良的博文
  3. python中pip下载的代理设置
  4. 读书笔记之一平米健身:硬派健身
  5. Django 开发微信公众号
  6. 计算器 android报告,bmi计算器android开放实验项目总结报告.pdf
  7. 搭建微信小程序HTTPS服务器
  8. 如何 让 Chrome (谷歌)浏览器 自动翻译
  9. js学习笔记----JavaScript中DOM扩展的那些事
  10. 【C++】引用以及关联函数(详解)