在 Python 程序中,函数 match() 的功能是在字符串中匹配正则表达式,如果匹配成功,则返回 MatchObject 对象实例。

使用函数 match() 的语法格式如下所示:

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

各参数的具体说明如下:

参数pattern:匹配的正则表达式。

参数string:要匹配的字符串。

参数flags:标志位,用于控制正则表达式的匹配方式,如是否区分大小写、匹配多行等。参数 flags 的选项如表 3 所示。

表 3:参数 flags 的选项

参数

意义

re.I

忽略大小写

re.L

根据本地设置而更改\w、\W、\b、\B、\s 以及 \S 的匹配内容

re.M

多行匹配模式

re.S

如果使“.”元字符,也匹配换行符

re.U

匹配 Unicode 字符

re.X

忽略模式中的空格,并且可以使用塔“#”注释

注意:在 Python 中有多个内置模块,在每个内置模块中都会有很多内置函数。在平常描述时通常会直接使用函数名,而不会用模块前缀的方式。但是在程序中,必须使用函数的完整形式。例如,在上面的内容中,函数 match() 是内置模块 re. 的成员,所以在平常可以直接使用函数名的形式。但是在编写程序时,必须用完整的形式,即 re.match。

匹配成功后,函数 re.match() 会返回一个匹配的对象,否则返回 None。可以使用函数 group(num) 或函数 groups() 来获取匹配的表达式,如表 4 所示。

表 4:使用函数 group(num) 或函数 groups() 获取匹配的表达式

匹配对象方法

描述

group(num=0)

匹配整个表达式的字符串,可以一次向 group() 输入多个组号,这种情况下它将返回一个包含那些组所对应值的元组

groups()

返回一个包含所有组中字符串的元组

下面是如何运用 match()(以及 group())的一个示例。

>>> m = re.match('foo', 'foo') #模式匹配字符串

>>> if m is not None: #如果匹配成功,就输出匹配内容

... m.group()

... '

foo'

模式“foo”完全匹配字符串“foo”,也能够确认 m 是交互式解释器中匹配对象的实例。

>>> m #确认返回的匹配对象

下面是一个失败的匹配示例,它会返回 None。

>>> m = re.match('foo', 'bar')  #模式并不能匹配字符串

>>> if m is not None: m.group()  #单行版本的 if 语句

...

>>>

因为上面的匹配失败,所以 m 被赋值为 None,而且以此方法构建的 if 语句没有指明任何操作。对于剩余的示例,为了简洁起见,可省去 if 语句块。但是在实际操作中,最好不要省去,以避免 AttributeError 异常(None 是返回的错误值,该值并没有 group() 属性[方法])。

只要模式从字符串的起始部分开始匹配,即使字符串比模式长,匹配也能够成功。例如,模式“foo”将在字符串“food on the table”中找到一个匹配,因为它是从字符串的起始部分进行匹配的。

>>> m = re.match('foo', 'food on the table') # 匹配成功

>>>m.group()

'foo'

此时可以看到,尽管字符串比模式要长,但从字符串的起始部分开始匹配就会成功。

子串“foo”是从那个比较长的字符串中抽取出来的匹配部分,甚至可以充分利用 Python 原生的面向对象特性,忽略保存中间过程产生的结果。

>>>re.match('foo', 'food on the table').group()

'foo'

注意:在上述演示实例中,如果匹配失败,将会抛出 AttributeError 异常。

下面的实例文件 sou.py 演示了使用函数 match() 进行匹配的过程。

import re #导入模块

re

print(re.match('www', 'www.example.com').span()) #在起始位置匹配

print(re.match('net', 'www.example.com')) #不在起始位置匹配

执行后会输出:

(0, 3)

None

在正则表达式应用中,经常会看到关于电子邮件地址格式的正则表达式\w+@\w+.com,通常用于匹配这个正则表达式所允许的更多邮件地址。为了支持在域名前添加主机名称,如 www.example.com,仅允许 example.com 作为整个域名,必须修改现有的正则表达式。

为了表示主机名是可选的,需要创建一个模式来匹配主机名(后面跟着一个句点),使用问号?操作符来表示该模式出现零次或一次,然后按照如下实例文件 duoge.py 所示的方式将可选的正则表达式插入之前的正则表达式\w+@(\w+\.)?\w+\.com中。

import re

patt = '\w+@(\w+\.)?\w+\.com'

print(re.match(patt, 'guan@example.com').group())

print(re.match(patt, 'guan@www.example.com').group())

patt = '\w+@(\w+\.)*\w+\.com'

print(re.match(patt, 'guan@www.xxx.yyy.zzz.com').group())

从上述实例代码可以看出,表达式\w+@(\w+\.)?\w+\.com允许在.com前面有一个或者两个名称。第 5 行代码允许任意数量的中间子域名存在,读者需要注意这里的细节变化,此处将前面的?形式修改为\w+@(\w+\.)*\w+.com。这样仅使用字母数字字符的方式,并不能匹配组成电子邮件地址的全部可能字符。上面的正则表达式不能匹配诸如.com的域名,或者使用非单词\W字符组成的域名。

下面的实例文件 tiqu.py 演示了使用函数 group() 提取字母和数字字符的过程。

import re

m = re.match('(\w\w\w)-(\d\d\d)', 'abc-123')

print(m.group()) #完整匹配

print(m.group(1)) #子组1

print(m.group(2)) #子组2

print(m.groups()) #全部子组

在上述代码中,使用正则表达式能够提取字母、数字字符串和数字,方法是使用函数 group() 访问每个独立的子组,以及使用函数 groups() 获取一个包含所有匹配子组的元组。

执行后会输出:

abc-123

abc

123

('abc', '123')

python正则表达式match方法_Python match()函数:匹配正则表达式相关推荐

  1. python的zip方法_python zip()函数使用方法解析

    这篇文章主要介绍了python zip()函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 参数iterable为可迭代的对象,并且可 ...

  2. python实现括号匹配算法_Python实现括号匹配方法详解

    这篇文章主要简介了python实现括号匹配方法详解,文中通过示例代码简介的非常具体,对大家的学习或者工作具有一定的参考学习网上卖,需要的朋友可以学习下 1.用一个栈[python中可以用List]就可 ...

  3. 搜索python题目的软件_Python编程快速上手——正则表达式查找功能案例分析

    本文实例讲述了Python正则表达式查找功能.分享给大家供大家参考,具体如下: 题目如下: 编写一个程序,打开文件夹中所有的.txt文件,查找匹配用户提供的正则表达式的所有行.结果应该打印到屏幕上. ...

  4. python __reduce__魔法方法_Python魔法方法指南

    (译)Python魔法方法指南 简介 本指南归纳于我的几个月的博客,主题是 魔法方法 . 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法" ...

  5. python列表get方法_Python json.get方法代码示例

    本文整理汇总了Python中json.get方法的典型用法代码示例.如果您正苦于以下问题:Python json.get方法的具体用法?Python json.get怎么用?Python json.g ...

  6. python 财务分析可视化方法_Python数据可视化的四种简易方法

    Python数据可视化的四种简易方法 作者:PHPYuan 时间:2018-11-28 03:40:43 摘要: 本文讲述了热图.二维密度图.蜘蛛图.树形图这四种Python数据可视化方法. 数据可视 ...

  7. python怎么调用方法_python中怎么调用自己的方法

    展开全部 C/C++对Python的调用2113层次可5261以分为三个层次, (1) 高层次的调用, (2)纯Python调用, (3) Python方法的4102扩展(也就使向Python输出调用 ...

  8. python对象点方法_python面向对象知识点疏理

    面向对象技术简介 类:用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例.class 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在 ...

  9. python画pr曲线_python 画函数曲线示例

    python 画函数曲线示例 如下所示: import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 2 * np.pi ...

  10. python列表比较方法_python列表常用方法

    list是一个类,用中括号括上,逗号分隔,元素可以是数字,字符,字符串,也可以是嵌套列表,布尔类型. 1.通过索引取值 li=[1,12,9,'age',['wangtianning',[19,'10 ...

最新文章

  1. pureftpd + pureftp-user-manager 构建磁盘配额,速率限制,web管理ftpserver
  2. C# 打印 长字符串自动换行
  3. 流行的9个Java框架介绍: 优点、缺点等等
  4. 东方卫视演得泰坦机器人_东方卫视《笑傲江湖4》今晚开播,郭德纲、陈赫过招喜剧新人,机器人脱口秀惊艳全场...
  5. k均值算法 二分k均值算法_如何获得K均值算法面试问题
  6. USB学习笔记连载(十五):USB固件更新以及安装驱动
  7. show,hide与fadeIn、fadeOu的区别
  8. Python爬虫基础-02-提取数据
  9. 4月10日服务器例行维护公告,4月12日服务器例行维护公告(已完成)
  10. Laravel自定义webpack.mix.js
  11. iOS 开发 code sign 代码签名深入剖析
  12. HP服务器连接显示器怎么连,笔记本如何外接显示器 外接显示器连接步骤【详解】...
  13. spotlight ios_如何禁用iOS 10的Spotlight搜索历史记录
  14. 怎样选择ADC芯片?
  15. C/C++面试/笔试题2022
  16. 使用XMind 打开MindManager 格式文件(.mmap)
  17. 日本人为什么不吃小龙虾!
  18. H5DS简单又强大的H5编辑器
  19. win10 一键卸载自带应用
  20. openssh for android,android安装openssh,通过其他电脑ssh登陆到安卓手机

热门文章

  1. 在线 excel 产品技术调研
  2. WIFI智能插座Homekit
  3. 【k8s系列5】KubernetesClientException: too old resource version 原因分析
  4. 虚拟机访问本地mysql_本地访问虚拟机oracle数据库的尝试
  5. 用了五年 VS Code ,我决定换成 JetBrains……
  6. 小程序 侧边栏(导航)滑动
  7. 一篇可以终结房价涨跌讨论的文章(…
  8. java判断101-200之间有多少个素数_并输出所有素数_编程基础练习:题目:判断101-200之间有多少个素数,并输出所有素数。 - 菜鸟头头...
  9. DP转HDMI方案|DP转HDMI自带SPI|AG6311设计电路|AG6311MDQ设计参考原理图
  10. CapstoneCS5212|CapstoneCS5218|DP转VGA1080P方案设计| DP转HDMI4K 30Hz方案设计