欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《在Python中匹配字符串的3个方法详解》。本知识点主要内容有:使用match()方法进行匹配、使用search()方法进行匹配、使用findall()方法进行匹配。

目录

1、使用match()方法进行匹配

2、使用search()方法进行匹配

3、使用findall()方法进行匹配


匹配字符串可以使用re模块提供的match()、search()和findall()等方法。下面分别进行介绍。

1、使用match()方法进行匹配

match()方法用于从字符串的开始处进行匹配,如果在起始位置匹配成功,则返回Match对象,否则返回None。其语法格式如下:

re.match(pattern, string, [flags])

其中,相关参数说明如下:

pattern:表示模式字符串,由要匹配的正则表达式转换而来。

string:表示要匹配的字符串。

flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。

常用的标志位及其说明:

re.A或ASCII  对于\w、\w、\b、\B、\d、\B、\d、\D、]s、\S进行ASCII匹配(仅适用于Python3)

re.I或IGNORECASE 使匹配对大小写不敏感

re.L 做本地化识别(locale-aware)匹配

re.M或MULTILINE 多行匹配,影响 ^ 和 $

re.S或DOTALL 使 . 匹配包括换行在内的所有字符

re.U或UNICODE 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.

re.X或VERBOSE 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

例如,匹配字符串是否以“zz_”开头,不区分字母大小写,代码如下:

import re
pattern = r'zz_\w+'                    # 模式字符串
string = 'ZZ_MALL zz_mall'             # 要匹配的字符串
match = re.match(pattern,string,re.I)  # 匹配字符串,不区分大小写
print(match)                           # 输出匹配结果
string = '项目名称 ZZ_MALL zz_mall'    # 要匹配的字符串
match = re.match(pattern,string,re.I)  # 匹配字符串,不区分大小写
print(match)                           # 输出匹配结果

运行结果如下:

<re.Match object; span=(0, 7), match='ZZ_MALL'>
None
>>>

从上面的执行结果中可以看出,字符串“ZZ_MALL”是以“zz_”开头,所以返回一个Match对象,而字符串“项目名称 ZZ_MALL zz_mall”不是以“zz_”开头,所以返回None。这是因为match()方法从字符串的开始位置开始匹配,当第一个字母不符合条件时,则不再进行匹配,直接返回None。

Match对象中包含了匹配值的位置和匹配数据。其中,要获取匹配值的起始位置可以使用Match对象的start()方法;要获取匹配值的结束位置可以使用end()方法;通过span()方法可以返回匹配位置的元组;通过string属性可以获取要匹配的字符串。例如下面的代码:

import re
pattern = r'zz_\w+'                    # 模式字符串
string = 'ZZ_MALL zz_mall'             # 要匹配的字符串
match = re.match(pattern,string,re.I)  # 匹配字符串,不区分大小写
print('匹配值的起始位置: ',match.start())
print('匹配值的结束位置: ',match.end())
print('匹配位置的元组: ',match.span())
print('要匹配的字符串: ',match.string)
print('匹配数据: ',match.group())

运行结果如下:

匹配值的起始位置:  0
匹配值的结束位置:  7
匹配位置的元组:  (0, 7)
要匹配的字符串:  ZZ_MALL zz_mall
匹配数据:  ZZ_MALL
>>>

下面实例,讲解一个判定的手机号码是不是有效的中国移动的号码。

import re                                       # 导入Python的re模块
pattern = r'(13[4-9]\d{8})|(15[01289]\d{8})$'
mobile = '13800000000'
match = re.match(pattern,mobile)                # 进行模式匹配
if match == None:                               # 判断是否为None,为真表示匹配失败print(mobile,'不是有效的中国移动手机号码。')
else:print(mobile,'是有效的中国移动手机号码。')
mobile = '13100000000'
match = re.match(pattern,mobile)                # 进行模式匹配
if match == None:                               # 判断是否为None,为真表示匹配失败print(mobile,'不是有效的中国移动手机号码。')
else:print(mobile,'是有效的中国移动手机号码。')

运行结果如下:

13800000000 是有效的中国移动手机号码。
13100000000 不是有效的中国移动手机号码。
>>>

2、使用search()方法进行匹配

search()方法用于在整个字符串中搜索第一个匹配的值,如果在起始位置匹配成功,则返回Match对象,否则返回None。其语法格式如下:

re.search(pattern, string, [flags])

其中,相关参数说明如下:

pattern:表示模式字符串,由要匹配的正则表达式转换而来。

string:表示要匹配的字符串。

flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。常用的标志前面说了。

例如,搜索第一个以“zz_”开头的字符串,不区分字母大小写,代码如下:

import re
pattern = r'zz_\w+'                    # 模式字符串
string = 'ZZ_MALL zz_mall'             # 要匹配的字符串
match = re.search(pattern,string,re.I) # 匹配字符串,不区分大小写
print(match)                           # 输出匹配结果
string = '项目名称 ZZ_MALL zz_mall'    # 要匹配的字符串
match = re.search(pattern,string,re.I) # 匹配字符串,不区分大小写
print(match)                           # 输出匹配结果

运行结果如下:

<re.Match object; span=(0, 7), match='ZZ_MALL'>
<re.Match object; span=(5, 12), match='ZZ_MALL'>
>>>

3、使用findall()方法进行匹配

findall()方法用于在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回。如果匹配成功,则返回包含匹配结构的列表,否则返回空列表。其语法格式如下:

re.findall(pattern, string, [flags])

其中,相关参数说明如下:

pattern:表示模式字符串,由要匹配的正则表达式转换而来。

string:表示要匹配的字符串。

flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。常用的标志上面有了。

例如,搜索以“zz_”开头的字符串,不区分字母大小写,代码如下:

import re
pattern = r'zz_\w+'                    # 模式字符串
string = 'ZZ_MALL zz_mall'             # 要匹配的字符串
match = re.findall(pattern,string,re.I)# 匹配字符串,不区分大小写
print(match)                           # 输出匹配结果
string = '项目名称 ZZ_MALL zz_mall'    # 要匹配的字符串
match = re.findall(pattern,string)     # 匹配字符串,区分大小写
print(match)                           # 输出匹配结果

运行结果为:

['ZZ_MALL', 'zz_mall']
['zz_mall']
>>>

上方下面这个结果只有一个,因为我使用了默认的设置,进行区分大小写了。

到此为止,本文学习的是《在Python中匹配字符串的3个方法详解》。本知识点主要内容有:使用match()方法进行匹配、使用search()方法进行匹配、使用findall()方法进行匹配。就讲解完毕了,有问题可以给我留言哦!

下一个知识点,我们讲解《在Python中替换字符串详解》。欢迎你对站长在线进行关注,评论,点赞,分享、转发!

站长在线Python精讲:在Python中匹配字符串的3个方法详解相关推荐

  1. 站长在线Python精讲:在Python中格式化字符串的两种方法详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中格式化字符串的两种方法详解>.本知识点主要内容有:使用%操作符格式化字符串和使用format()方法格式化字 ...

  2. python中的class怎么用_对python 中class与变量的使用方法详解

    python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...

  3. python中class变量_对python 中class与变量的使用方法详解

    python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...

  4. python中unicode编码表_Python中的字符串操作和编码Unicode详解

    本文主要给大家介绍了关于 Python中的字符串操作和编码Unicode的一些知识,下面话不多说,需要的朋友们下面来一起学习吧. 字符串类型 str:Unicode字符串.采用''或者r''构造的字符 ...

  5. python布尔型数组_对numpy中布尔型数组的处理方法详解

    布尔数组的操作方式主要有两种,any用于查看数组中是否有True的值,而all则用于查看数组是否全都是True. 如果用于计算的时候,布尔量会被转换成1和0,True转换成1,False转换成0.通过 ...

  6. python字符串format方法参数解释,一文秒懂!Python字符串格式化之format方法详解

    一文秒懂!Python字符串格式化之format方法详解 一文秒懂!Python字符串格式化之format方法详解 format是字符串内嵌的一个方法,用于格式化字符串.以大括号{}来标明被替换的字符 ...

  7. php 修改 wordpress,修改WordPress中文章编辑器的样式的方法详解

    这篇文章主要介绍了修改WordPress中文章编辑器的样式的方法详解,同时文中也推荐了两款取代默认文章编辑器的插件,需要的朋友可以参考下 自定义文章编辑器的样式每一个 WordPress 主题的文章样 ...

  8. object类中的equals与自定义equals方法详解

    object类中的equals与自定义equal方法详解 1.this怎么理解?this == obj表示什么? this就是当前你new出来的对象,这里指谁调用equal方法this指的就是谁,ob ...

  9. pythonbool类型数组生成_对numpy中布尔型数组的处理方法详解

    布尔数组的操作方式主要有两种,any用于查看数组中是否有True的值,而all则用于查看数组是否全都是True. 如果用于计算的时候,布尔量会被转换成1和0,True转换成1,False转换成0.通过 ...

最新文章

  1. 自动调度GPU的卷积层
  2. UA MATH567 高维统计专题1 稀疏信号及其恢复3 Coherence与RIP简介
  3. 16.Hadoop架构再探讨第2部分
  4. 关于python读取文件的规则
  5. cocos 修改层级_cocos creator 场景如何透明,多个canvas层级显示
  6. kSum,实现方式,动态规划
  7. navicat如何连接腾讯mysql_使用Navicat连接腾讯云Mysql数据库
  8. 20155305乔磊2016-2017-2《Java程序设计》第四周学习总结
  9. Python中的xxx+=xxx和xxx=xxx+xxx一些区别及执行过程
  10. 阿里开发者们的第13个感悟:工程师需要在循环迭代中成长
  11. java 线程分组_Java多线程可以分组,还能这样玩!
  12. python修饰器_python修饰器
  13. 开源cms系统We7插件开发准备工作全面就绪
  14. 张口就问“CCIE”月薪多少
  15. MySQL-第一篇认识MySQL
  16. paip.提高开发效率----自动数据库SQL备份
  17. C# 操作Gmap简单使用方法
  18. JAVA远程读取服务器文件
  19. Sketch 56.3 for Mac下载
  20. 单片机的一些名词解释

热门文章

  1. Java作业——找到休息日
  2. Linux学习笔记之Linux常用命令
  3. mysql can#039;t create_网络编程安装mysql-8.0.19-winx64遇到的问题:Can#039;t create directory #039;xxxx\Databa...
  4. 奥运五环python代码_python图形绘制奥运五环实例讲解
  5. 与人相处,请多一份真诚
  6. ppt制作之如何在ppt中制作双色渐变效果
  7. 3dsMax导出模型到Blender后金属度变成1
  8. 腾讯测试工程师:你以为会打LOL就能做测试了?
  9. 焊锡条的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  10. excel表格中出现乱码怎么办?