分享好友 最新动态首页 最新动态分类 切换频道
第二章 re模块手机号定位「第二章 re模块」
2025-01-14 09:38

在处理字符串时,经常会有查找符合某些复杂规则的字符串的需求。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

Python 提供了 re 模块用于实现正则表达式的操作。在实现时,可以使用 re 模块提供的方法,如search()、match()、findall() 等,进行字符串处理,也可以先使用 re 模块的 compile() 方法将模式字符串转换为正则表达式对象,然后再使用该正则表达式对象的相关方法来操作字符串。re 模块在使用时,需要先用 import 语句引入,具体代码如下

 
 

在这里插入图片描述

在这里插入图片描述

在正则表达式中,提供了一个通配符——英文状态下输入的“.”,用于匹配除“ ”和“ ”以外的任意单个字符。如果想要使用“.”匹配“ ”换行符,则需要指定 flags=re.DOTALL。例如,“.”可以匹配 mr M R 中的 m、r、M、 、R。

在这里插入图片描述

在这里插入图片描述

正则表达式中提供了管道符,即“或”操作符,用于匹配两个或者多个正则表达式中的一个。例如,A|B,其中 A 和 B 都是正则表达式,在匹配时,从左到右进行匹配,当一个样式完全匹配时,另一个就不再匹配。即如果 A 匹配成功,则 B 就不再匹配。

子模式也就是分组的意思,使用小括号可以对正则表达式进行分组。如 (.[0-9]{1,3}){3},就是对分组 (.[0-9]{1,3}) 进行重复操作。

另外,小括号字符也可以改变限定符的作用范围,如“|”“*”“^”等。来看下面的一个表达式

 

这个表达式的意思是匹配单词 thirth 或 fourth,如果不使用小括号,那么就变成了匹配单词 thir或 fourth 了。

正则表达式中的转义字符)和 Python 中的大同小异,都是将特殊字符(如“.”“?”“”等)变为普通字符。举一个 IP 地址的实例,用正则表达式匹配诸如 127.0.0.1 这样格式的 IP 地址,如果直接使用点字符,格式为

 

这显然不对,因为“.”可以匹配一个任意字符。这时,不仅是 127.0.0.1 这样的 IP,连127101011 这样的字符串也会被匹配出来。所以在使用“.”时,需要使用转义字符)。修改后上面的正则表达式格式为

 
 

在使用 re 模块提供的方法时,经常需要指定一个 flags 参数,该参数为标志修饰符,是一个可选参数。通过它可以指定是否区分字母大小写、多行匹配等。

在这里插入图片描述

compile() 方法用于编译正则表达式模式,返回一个对象的模式。然后可以通过 RegexObject 对象调用 match() 和 search() 方法。语法格式如下

 

参数说明

  • pattern :编译时用的表达式字符串。

  • flags :编译标志位,用于修改正则表达式的匹配方式,如是否区分大小写、多行匹配等。

  • 返回值:返回一个正则表达式对象。

使用 compile() 方法创建一个可以查找包含指定字母对应单词的正则表达式对象,并输出符合条件的英文单词,代码如下

 
 
 

escape() 方法用于对字符串中的非字母数字进行转义。语法格式如下

 

参数说明

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

  • 返回值:返回转义后的字符串。

使用 escape() 方法实现对字符串中的非字母数字进行转义,代码如下

 

程序运行结果如下

 
 
 

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

 

参数说明

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

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

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

  • 返回值:返回一个符合表达式匹配结果的列表。

使用 findall() 方法搜索以“mr_”开头的字符串,代码如下

 
 
 

finditer() 方法和 findall() 方法类似,它的功能为在字符串中找到正则表达式所匹配的所有子串,但是把它们作为一个迭代器返回。语法格式如下

 

参数说明

  • pattern :表示匹配的正则表达式。

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

  • flags :表示标志位,用户控制正则表达式的匹配方式,如是否区分大小写、多行匹配等。

  • 返回值:返回一个符合表达式匹配结果的迭代器。

使用 finditer() 方法获取字符串中的所有数值,代码如下

 
 
 

fullmatch() 方法用于对整个字符串进行匹配,如果整个字符串匹配到正则表达式样式,就返回一个相应的匹配对象,否则就返回一个 None。语法格式如下

 

参数说明

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

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

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

  • 返回值:如果整个 string 匹配到正则表达式样式,就返回一个相应的 Match 对象

使用 fullmatch() 方法实现匹配整个字符串,代码如下

 

程序运行结果如下

 
 
 

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

 

参数说明

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

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

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

  • 返回值:如果 string 的开始处有 0 或多个字符匹配到了正则表达式样式,就返回一个相应的 Match 对象

使用 match() 方法判断匹配字符串是否以“mr_”开头,不区分字母大小写,代码如下

 

程序运行结果如下

 
 
 

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

 

参数说明

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

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

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

  • 返回值:扫描整个字符串找到匹配样式的第一个位置,并返回一个相应的匹配对象。如果没有匹配,就返回一个 None。注意,这和找到一个零长度匹配是不同的。

使用 search() 方法搜索第一个以“mr_”开头的字符串,不区分字母大小写,代码如下

 

程序运行结果如下

 
 
 

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

 

参数说明

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

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

  • maxsplit :可选参数,表示最大的拆分次数。

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

  • 返回值:返回一个分割后的字符串列表。

使用split()方法实现从给定的 URL 地址中提取出请求地址和各个参数的功能,代码如下

 

程序运行结果如下

 
 
 

sub() 方法用于实现字符串替换。语法格式如下

 

参数说明

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

  • repl :表示替换的字符串。

  • string :表示要被查找替换的原始字符串。

  • count :可选参数,表示模式匹配后替换的最大次数,默认值为 0,表示替换所有的匹配。

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

  • 返回值:返回替换后的字符串。

使用 sub() 方法实现隐藏中奖信息中的手机号码的功能,代码如下

 

程序运行结果如下

 
 

使用 sub() 方法排除字符串中的汉字、字母与数字,代码如下

 

程序运行结果如下

 
 
 

subn() 方法与 sub() 方法相同,都是用于实现字符串的替换。但 subn() 方法返回一个元组,其中包含新字符串和替换次数。语法格式如下

 

参数说明

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

  • repl :表示替换的字符串。

  • string :表示要被查找替换的原始字符串。

  • count :可选参数,表示模式匹配后替换的最大次数,默认值为 0,表示替换所有的匹配。

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

  • 返回值:返回一个包含替换后字符串与替换次数的元组。

使用 subn() 方法实现替换字符串中的指定内容的功能,代码如下

 
 
 

Pattern.flags 属性用于获取正则表达式中匹配模式对应的标记。语法格式如下

 
 

使用 Pattern.flags 属性获取常见匹配模式对应的标记,代码如下

 
 
 

Pattern.groups 属性用于获取正则表达式中组合的数量。语法格式如下

 
 

使用 Pattern.groups 属性获取正则表达式中组合的数量,代码如下

 
 
 

Pattern.groupindex 属性用于获取正则表达式中分组名称与对应的分组编号。语法格式如下

 
 

使用 Pattern.groupindex 属性获取表达式中分组名称与对应的分组编号,代码如下

 

程序运行结果如下

 
 
 

Pattern.pattern 属性用于获取正则表达式中的模式字符串。语法格式如下

 
 

使用 Pattern.pattern 属性获取表达式中的模式字符串,代码如下

 

程序运行结果如下

 
 
 

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

 

参数说明

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

  • pos :表示匹配的起始位置,该参数为可选参数,默认值为 0。

  • endpos :表示匹配的结束位置,该参数为可选参数,默认为需要匹配字符串的长度,所以只有从 pos 到 endpos-1 的字符会被匹配。

  • 返回值:返回一个符合表达式匹配结果的列表。

使用 Pattern.findall() 方法搜索字符串中以“mr_”开头的字符串,代码如下

 

程序运行结果如下

 
 
 

Pattern.finditer() 方法用于在字符串中找到正则表达式所匹配的所有子串,把它们作为一个迭代器返回。该方法可以指定匹配字符串的范围。语法格式如下

 

参数说明

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

  • pos :表示匹配的起始位置,该参数为可选参数,默认值为 0。

  • endpos :表示匹配的结束位置,该参数为可选参数,默认为需要匹配字符串的长度,所以只有从 pos 到 endpos-1 的字符会被匹配。

  • 返回值:返回一个符合表达式匹配结果的迭代器。

使用 Pattern.finditer() 方法获取字符串中指定范围的所有数字,代码如下

 
 
 

Pattern.fullmatch() 方法用于对整个字符串匹配。从 pos 下标位置开始逐个对字符串进行匹配直到 endpos 下标位置,如果匹配成功则返回匹配成功的 Match 对象;如果没有匹配成功,就返回None。语法格式如下

 

参数说明

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

  • pos :表示匹配的起始位置,该参数为可选参数,默认值为 0。

  • endpos :表示匹配的结束位置,该参数为可选参数,默认为需要匹配字符串的长度,所以只有从 pos 到 endpos-1 的字符会被匹配。

  • 返回值:如果整个 string 匹配到正则表达式样式,就返回一个相应的 Match 对象。

使用 Pattern.fullmatch() 方法获取字符串中开始处符合表达式的值,代码如下

 

程序运行结果如下

 
 
 

Pattern.match() 方法用于从字符开始处匹配字符串的值,从 pos 下标位置开始逐个对字符串进行匹配直到 endpos 下标位置,如果匹配成功则返回匹配成功的 Match 对象;如果没有匹配成功,就返回 None。语法格式如下

 

参数说明

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

  • pos :表示匹配的起始位置,该参数为可选参数,默认值为 0。

  • endpos :表示匹配的结束位置,该参数为可选参数,默认为需要匹配字符串的长度,所以只有从 pos 到 endpos-1 的字符会被匹配。

  • 返回值:如果 string 开始的位置可以匹配到正则表达式样式,就返回一个相应的 Match 对象。

使用 Pattern.match() 方法获取字符串中开始处符合表达式的值,代码如下

 

程序运行结果如下

 
 
 

Pattern.search() 方法用于搜索第一个匹配的位置,从 pos 下标位置开始逐个对字符串进行匹配直到 endpos 下标位置,如果匹配成功,则返回匹配成功的 Match 对象,否则返回 None。语法格式如下

 

参数说明

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

  • pos :表示匹配的起始位置,该参数为可选参数,默认值为 0。

  • endpos :表示匹配的结束位置,该参数为可选参数,默认为需要匹配字符串的长度,所以只有从 pos 到 endpos-1 的字符会被匹配。

  • 返回值:扫描整个字符串找到匹配样式的第一个位置,并返回一个相应的匹配对象。

使用 Pattern.search() 方法获取字符串中第一个匹配值与位置,代码如下

 

程序运行结果如下

 
 
 

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

 

参数说明

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

  • maxsplit :可选参数,表示最大的拆分次数。

  • 返回值:返回一个分割后的字符串列表。

使用 Pattern.split() 方法实现从给定的 URL 地址中提取出请求地址和各个参数,代码如下

 
 
 
 

Pattern.sub() 方法与 re.sub() 方法相同,用于实现字符串替换。语法格式如下

 

参数说明

  • repl :表示替换的字符串。

  • string :表示要被查找替换的原始字符串。

  • count :可选参数,表示模式匹配后替换的最大次数,默认值为 0,表示替换所有的匹配。

  • 返回值:返回替换后的字符串。

使用 Pattern.sub() 方法实现隐藏中奖信息中的手机号码的功能,代码如下

 
 
 

Pattern.subn() 方法与 re.subn() 方法相同,都是用于实现字符串的替换并返回一个元组,其中包含新字符串和替换次数。语法格式如下

 

参数说明

  • repl :表示替换的字符串。

  • string :表示要被查找替换的原始字符串。

  • count :可选参数,表示模式匹配后替换的最大次数,默认值为 0,表示替换所有的匹配。

  • 返回值:返回一个包含替换后字符串与替换次数的元组。

使用 Pattern.subn() 方法实现替换字符串中的指定内容的功能,代码如下

 
 
 

Match.endpos 属性用于获取正则表达式在字符串结束匹配的索引位置。语法格式如下

 
 

使用 Match.endpos 属性获取正则表达式在字符串结束匹配的索引位置,代码如下

 

程序运行结果如下

 
 
 

Match.pos 属性用于获取正则表达式在字符串开始匹配的索引位置。语法格式如下

 
 

使用 Match.pos 属性获取正则表达式在字符串开始匹配的索引位置,代码如下

 

程序运行结果如下

 
 
 

Match.lastindex 属性用于捕获组的最后一个匹配的索引值。语法格式如下

 
 

使用 Match.lastindex 属性获取最后一个匹配到的组所对应的索引值,代码如下

 
 
 

Match.lastgroup 属性用于获取最后一个匹配组的名称,如果匹配的组没有名字或者没有产生匹配的情况下,则返回 None。语法格式如下

 
 

使用 Match.lastgroup 属性获取最后一个匹配组的名称,代码如下:decimal

 
 
 

Match.re 属性用于获取产生 Match 实例的正则表达式对象。语法格式如下

 
 

使用 Match.re 属性获取产生 Match 实例的正则表达式对象,代码如下

 

程序运行结果如下

 
 
 

Match.string 属性用于获取 Match 对象中需要匹配的字符串。语法格式如下

 
 

使用 Match.string 属性获取 Match 对象中需要匹配的字符串,代码如下

 
 
 

Match.__getitem__() 方法与 Match.group() 方法相似,只是 __getitem__() 方法每次只能获取一个分组的信息。语法格式如下

 

参数说明

  • g :表示分组对应的编号或分组名称。

  • 返回值:返回一个匹配的分组信息。

使用 Match.getitem() 方法获取指定分组对应的信息,代码如下

 
 
 

Match.end() 方法用于获取分组匹配字符串对应的结束标记。语法格式如下

 

参数说明

  • group :表示分组名或者分组名对应的编号。

  • 返回值:返回分组匹配字符串对应的结束标记。

使用 Match.start() 方法与 Match.end() 方法获取分组匹配字符串对应的开始、结束标记,代码如下

 
 
 

Match.expand() 方法用于实现把字符串中用反斜杠“”表示的数字或组名替换为相应分组中的值的功能。语法格式如下

 

参数说明

  • template :表示需要替换的字符串。

  • 返回值:返回对“”进行转义替换的结果。

使用 Match.expand() 方法,在字符串中指定位置替换对应分组中的值,代码如下

 
 
 

Match.groups() 方法用于获取以元组形式返回所有子组中内容。语法格式如下

 

参数说明

  • default :用于不参与匹配的情况,默认为 None。

  • 返回值:以元组形式返回所有子组中内容。

使用 Match.groups() 方法获取所有分组对应的内容,代码如下

 
 
 

Match.group() 方法用于获取 Match 对象中一个或多个匹配的子组。如果只有一个(0~99)参数,结果就是一个字符串;如果有多个参数,结果就是一个元组(每个参数对应一个项;如果没有参数,组 1 默认到 0(整个匹配都被返回)。如果一个组 N 参数值为 0,相应的返回值就是整个匹配字符串;如果一个组号是负数或超出组的最大长度,则给出越界错误;如果正则表达式中的一个组匹配了多个值,则相应的组只保存最后匹配的值。语法格式如下

 

参数说明

  • group1 :表示分组对应的编号或分组名称。

  • 返回值:返回一个或者多个匹配的子组。

使用 Match.group() 方法获取指定分组对应的信息,代码如下

 
 
 

Match.groupdict()方法用于获取以字典形式返回包含所有匹配值分组的信息,其中key就是组名,value 就是分组匹配的信息内容。语法格式如下

 

参数说明

  • default :用于不参与匹配的情况,默认为 None。

  • 返回值:以字典形式返回包含所有匹配值分组的信息。

使用 Match.groupdict() 方法获取字典形式的分组信息,代码如下

 
 
 

Match.span() 方法用于获取指定分组匹配字符串的开始和结束位置。语法格式如下

 

参数说明

  • group :表示分组名或者分组名对应的编号。

  • 返回值:返回一个包含开始和结束位置的二元组。

使用 Match.span() 方法获取指定分组匹配字符串的开始和结束位置,代码如下

 
 
 

Match.start() 方法用于获取分组匹配字符串对应的开始标记。语法格式如下

 

参数说明

  • group :表示分组名或者分组名对应的编号。

  • 返回值:返回分组匹配字符串对应的开始标记。

使用 Match.start() 方法与 Match.end() 方法获取分组匹配字符串对应的开始、结束标记,代码如下

最新文章
M4 MacBook Air适合谁买?用了一阵子后我有了答案
2021年,小雷把2018年款MacBook Pro升级成了16英寸的M1 Pro MacBook Pro,开启了带着两公斤笔记本出差写稿修图的日子。在不考虑重量的情况下,16寸屏幕的体验确实相当惊艳。但随着这几年出差频率的提高,16寸MacBook Pro的重量确实有些难以
《浪姐6》出圈难?李嘉琦却凭实力魅力破局
今年,《浪姐6》毫无悬念地成了开年最火爆的综艺节目。从最开始公布嘉宾阵容的时候起,它就吸引了无数人的目光,热度一路猛涨,等到正式开播这关注度更是居高不下。本以为节目开播后会像前几季那样诞生出不少让人眼前一亮、火爆全网的团秀
@小升初家长,4月21日起开始信息核对
记者今日获悉,4月21日,小升初信息核对即将开始,以下信息非常重要,请在规定时间内准确地完成信息核对。信息核对期间,学生、家长随时可上网办理,信息核对不分先后,建议合理安排时间、错峰办理。信息核对时间:4月21日10:00—4月25日17
HMD Hyper曝光:正面致敬N9设计,搭载骁龙6 Gen 1hmd手机「HMD Hyper曝光:正面致敬N9设计,搭载骁龙6 Gen 1」
据8月13日最新消息,来自可靠消息源HMD Meme的透露,HMD Global公司即将推出一款名为HMD Hyper的新款智能。这款新机在设计上与今年7月18日发布的HMD Skyline手机有着异曲同工之妙,正面设计被誉为向经典诺基亚N9的致敬之作。硬件配置方面,
android手机读取GPU信息 手机调用gpu手机gpu「android手机读取GPU信息 手机调用gpu」
安卓手机具备camera imu gps等SLAM技术所需要的传感器,且安卓手机很普及,如果能使用安卓设备作为ros的sensor,通过安卓设备节点传输到计算机,进行实时定位与建图分析,那么这项技术将变得很易用。以下介绍并不是事无巨细的介绍,要求阅读
匈牙利师生团的广州之行:天河 “探馆”,南沙交流
3月27日,代表团到访十五运会和残特奥会广州赛区执委会,通过专题座谈全面了解十五运会赛事规划。执委会相关负责人向匈牙利师生生动讲述了广州的体育发展历程。他特别提到,作为中国“南大门”的广州不仅拥有悠久的体育传统,更培育出如奥
手机上怎么贷款手机上怎么贷款「手机上怎么贷款」
“又何间焉”的“焉”是疑问语气词,可译为呢。出自先秦左丘明的《曹刿论战》。原文节选:十年春,齐师伐我。公将战,曹刿请见。其乡人曰:“肉食者谋之,又何间焉?”刿曰:“肉食者鄙,未能远谋。”乃入见。问:“何以战?”公曰:“衣食
唯捷创芯:助力智能手机创新的射频前端技术不容错过手机射频「唯捷创芯:助力智能手机创新的射频前端技术不容错过」
在智能手机行业,技术的不断进步是推动市场发展的核心动力之一。唯捷创芯(688153.SH)于2024年10月23日透露,其广泛应用于智能手机领域的射频前端技术,正受到小米等多家全球知名手机品牌的青睐。这一消息引发了投资者的热烈讨论,进一步
android 驱动使用内存 手机内存驱动android手机驱动「android 驱动使用内存 手机内存驱动」
Android系统的匿名共享内存Ashmem驱动程序利用了Linux的共享内存子系统导出的接口来实现,本文通过源码分析方式详细介绍Android系统的匿名共享内存机制。在Android系统中,匿名共享内存也是进程间通信方式的一种。相比于malloc和anonymous/
oppo手机如何关机oppo手机怎么关机「oppo手机如何关机」
在智能手机普及的今天,OPPO作为国内知名的手机品牌,其产品在市场上广受好评。无论是日常使用还是遇到特殊情况,掌握正确的关机方法对于每一位OPPO手机用户来说都至关重要。本文将详细介绍OPPO手机关机的几种常见方式,帮助用户轻松应对各
相关文章
推荐文章
发表评论
0评