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

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

欢迎你来到站长在线的站长学堂学习python知识,本文学习的是《Python中匹配字符串的3个方法详解》。本知识点主要内容有:使用match()方法进行匹配、使用search()方法进行匹配、使用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中替换字符串详解》。欢迎你对站长在线进行关注,评论,点赞,分享、转发!



本文地址:https://www.olzz.com/pythonpipeizifuchuandesangefangfa.html
码字不易,打个赏呗
杨泽业感谢你的支持!

猜你喜欢

域名pythonw.cn出售

域名pythonw.cn的详细信息:Python网

2022-08-06  分类:域名出售  浏览:1456次


站长在线Python教程:Python中类定义详解

导读:欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《Python中类定义详解》。

2022-02-23  分类:Python学堂  浏览:2032次


站长在线Python教程:python中面向对象相关概述详解

导读:欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《python中面向对象相关概述详解》。本文的主要内容有:面向对象是什么、面向对象中的对象是什么、Python中的类是什么、面向对象编程的特点有哪些?

2022-02-14  分类:Python学堂  浏览:1729次


站长在线零基础Python完全自学教程23:函数的返回值、作用域和匿名函数

导读:欢迎你来到站长学堂,学习站长在线出品的在线课程《零基础 Python完全自学教程》今天给大家分享的是第23课《函数的返回值、作用域和匿名函数》。本文是一个大课程分成了下面4节小课程:Python中函数的返回值、Python函数中的局部变量、Python函数中的全局变量、Python函数中的匿名函数等内容。

2022-02-09  分类:Python学堂  浏览:1596次


站长在线Python教程:Python函数中的匿名函数详解

欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《Python函数中的匿名函数详解》。本文的主要内容有:匿名函数的定义、匿名函数的表达式、匿名函数的注意点、匿名函数的优点、匿名函数的应用举例。

2022-02-01  分类:Python学堂  浏览:1714次


站长在线Python教程精讲:在Python函数中的全局变量详解

欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《Python中的全局变量详解》。本文的主要内容有:什么是全局变量、在函数外部定义的变量是全局变量、在函数内部定义中添加global关键词后变成全局变量。

2022-01-10  分类:Python学堂  浏览:1829次


站长在线Python教程精讲:在Python函数中的局部变量详解

导读:欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《在Python函数中的局部变量详解》。本文的主要内容有:变量的作用域的概念、局部变量的概念、局部变量的举例。

2022-01-06  分类:Python学堂  浏览:1733次


Python常用英语及用法

站长在线站长,准备系统的学习Python知识,但是对我来说,英语实在是太差了,当然我知道的是,不仅仅我,很多人在学习Python的时候,也是不知道这些英语单词的意思与用法的,在这里站长在线站长就把这些英语整理出来,把英语以及中文意思、用法一起贴出来,让大家一起来学习。

2022-01-02  分类:Python学堂  浏览:1941次


站长在线Python精讲:Python中函数的返回值

导读:欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《Python中函数的返回值》。本文的主要内容有:函数的返回值的含义、函数设置返回值的作用、return语句位置与多条 return语句的总结。

2021-12-29  分类:Python学堂  浏览:1903次


站长在线零基础Python完全自学教程22:在Python中函数的参数传递

欢迎你来到站长学堂,学习站长在线出品的在线课程《零基础 Python完全自学教程》今天给大家分享的是第22课《在Python中函数的参数传递》。本文是一个大课程分成了下面5节小课程:在Python函数中理解形式参数和实际参数、在Python函数中参数传递的位置参数详解、在Python函数中的关键字参数详解、在Python函数中的默认参数详解、在Python函数中的可变参数详解。

2021-12-26  分类:Python学堂  浏览:1683次