首页IT科技python的re库findall(Python之re库用法细讲)

python的re库findall(Python之re库用法细讲)

时间2025-05-01 04:35:03分类IT科技浏览3813
导读:前言   在之前的博客中我们学习了【正则表达式】的诸多用法,但是还没有真正在Python代码中使用过。其实Python语言专门提供了 re 模块,用于实现正则表达式的操作。在实现时,可以使用 re 模块提供的方法(如 search( 、match( 、findall( 等)进行字符串处...

前言

  在之前的博客中我们学习了【正则表达式】的诸多用法           ,但是还没有真正在Python代码中使用过           。其实Python语言专门提供了 re 模块              ,用于实现正则表达式的操作              。在实现时      ,可以使用 re 模块提供的方法(如 search()          、match()                 、findall()等)进行字符串处理         ,也可以先使用 re 模块的 compile() 方法将模式字符串转换为正则表达式对象              ,然后再使用该正则表达式对象的相关方法来操作字符串         ,接下来就跟大家介绍一下 re 模块的详细用法      。

一    、使用 re 模块的前期准备工作

首先我们要知道 re 模块是Python语言内置的      ,不用额外安装         。但在使用时需要先用 import 语句引入该模块              ,代码如下:

import re

注意:在使用 re 模块时           ,一定要先 import 语句引入   ,否则会报错如下图所示              。

二       、使用 re 模块匹配字符串

  re 模块中提供了 match()                  、search() 和 findall() 等方法专门用来匹配字符串               ,可以从海量数据中精确筛选出需要的对象             ,我们逐一来看看每种方法的具体实现         。

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

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

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

参数说明

pattern:表示模式字符串   ,由要匹配的正则表达式转换而来              。 string:表示要匹配的字符串           。 flags:可选参数           ,表示标志位              ,用于控制匹配方式      ,如是否区分字母大小写       、是否包括换行等等   。常用的标志如下表所示               。 标志 说明 A 或 ASCII 对于 \w    、\W                 、\b          、\B  、\d                、\D             、\s 和 \S 只进行 ASCII 匹配(仅适用于Python3.x) I 或 IGNORECASE 执行不区分字母大小写的匹配 M 或 MULTILINE 将 ^ 和 $ 用于包括整个字符串的开始和结尾的每一行(默认情况下         ,仅适用于整个字符串的开始和结尾处) S 或 DOTALL 使用(.)字符匹配所有字符              ,包括换行符 X 或 VERBOSE 忽略模式字符串中未转义的空格和注释

看到表中这么多标志位         ,有的小伙伴应该已经懵了      ,这都是啥?

没关系              ,先通过下图的代码案例给大家细细道来             。

  上面代码实现的功能是从给定的字符串 string 中按照指定的 pattern 模式来匹配有没有我们要的结果           ,pattern 语句中的代码意思是:该语句要以字符串 my_ 开头   ,\w+ 在之前的博客【Python之正则表达式细讲】中有讲过               ,是匹配字母、数字             、下划线或汉字一次或多次             ,默认是贪婪匹配,也就是所有符合条件的都会匹配出来。但是结果为 None             ,也就是没有匹配到               ,因为待匹配字符串中是以大写字母开头的   ,而使用正则表达式匹配字符串时           ,默认是严格区分大小写的             。所以如果要不区分字母大小写              ,就要加上可选参数 flags 来控制匹配方式      ,使用到标志位 I 或 IGNORECASE               。如下图所示:

说明match() 方法从字符串的开始位置开始匹配         ,一旦当第一个字母不符合条件时              ,则不再进行匹配         ,直接返回 None      ,如下图代码所示   。

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

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

代码运行之后结果如下:

匹配值的起始位置: 0 匹配值的结束位置: 8 匹配位置的元组: (0, 8) 要匹配的字符串: MY_PHONE my_phone 匹配数据: MY_PHONE

  运行结果中匹配值的结束位置之所以是 8   ,是因为match() 方法匹配时               ,如果待匹配字符串中有多个符合规则的结果             ,也只返回第一个      。 而匹配规则中 \w 是匹配字母                、数字  、下划线和汉字,所以匹配到中间空格那里第一个符合规则的结果就匹配结束了             ,即使后面有别的符合规则的结果               ,也不再进行匹配         。

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

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

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

参数说明

pattern:表示模式字符串      ,由要匹配的正则表达式转换而来         。 string:表示要匹配的字符串      。 flags:可选参数         ,表示标志位              ,用于控制匹配方式         ,如是否区分字母大小写          、是否包括换行等等              。

代码示例如下图所示:

说明search() 方法不仅是在字符串的起始位置搜索      ,其他位置上有符合的匹配也可以进行搜索              ,但是最终不论待匹配字符串中有多少个符合的结果           ,也只会返回一个           。

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

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

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

参数说明

pattern:表示模式字符串             ,由要匹配的正则表达式转换而来             。 string:表示要匹配的字符串。 flags:可选参数,表示标志位             ,用于控制匹配方式               ,如是否区分字母大小写                 、是否包括换行等等             。

代码示例如下图所示:

说明以上三种匹配方法   ,最常用的还是 findall() 方法           ,因为 match() 和 search() 均只能返回一个符合的结果               。

三    、使用 re 模块替换字符串

re 模块中的 sub() 方法用于实现字符串替换              ,语法格式如下:

re.sub(pattern, repl, string, count, flags)

参数说明

pattern:表示模式字符串      ,由要匹配的正则表达式转换而来   。 repl:表示要替换的字符串           。 string:表示要被查找替换的原始字符串              。 count:可选参数         ,表示模式匹配后替换的最大次数              ,默认值为 0         ,表示替换所有的匹配      。 flags:可选参数      ,表示标志位              ,用于控制匹配方式           ,如是否区分字母大小写       、是否包括换行等等         。

代码示例如下图所示:

四                  、使用 re 模块分割字符串

  re 模块中的 split() 方法用于实现根据正则表达式分割字符串   ,并以列表的形式返回              。其作用同字符串对象的 split() 方法类似               ,所不同的就是分割字符由模式字符串指定         。split() 方法的语法格式如下:

re.split(pattern, string, [maxsplit], [flags])

参数说明

pattern:表示模式字符串             ,由要匹配的正则表达式转换而来      。 string:表示要匹配的字符串              。 maxsplit:可选参数,表示最大的拆分次数           。 flags:可选参数             ,表示标志位               ,用于控制匹配方式   ,如是否区分字母大小写       、是否包括换行等等   。

代码示例如下图所示:

总结

  博客中主要讲解了Python语言中 re 库的各种方法           ,在之后开发中最常用的就是匹配方法和替换方法              ,其中匹配方法主要使用 findall()               。其实这些用法不难      ,难的还是其中的模式字符串需要用到的正则表达式搭配         ,这些正则表达式中各种特殊字符的含义大家要牢记             。如果这些还不明白的可以回头看看博主之前的博客【Python之正则表达式细讲】。

声明:本站所有文章              ,如无特殊说明或标注         ,均为本站原创发布             。任何个人或组织      ,在未征得本站同意时              ,禁止复制    、盗用                 、采集          、发布本站内容到任何网站  、书籍等各类媒体平台               。如若本站内容侵犯了原著者的合法权益           ,可联系我们进行处理   。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
vue watch与computed区别(vue3使用watch失效的一个原因) 如何提高网站曝光率的方法(如何提高网站曝光率和清晰度)