| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> 站长在线零基础Python完全自学教程20:在Python中使用正则表达式完全解读 -> 正文阅读 |
|
[Python知识库]站长在线零基础Python完全自学教程20:在Python中使用正则表达式完全解读 |
欢迎你来到站长学堂,学习站长在线出品的在线课程《零基础?Python完全自学教程》今天给大家分享的是第20课《?在Python中使用正则表达式完全解读》。本节课是一个大课,我分了这些知识点进行详细讲解:正则表达式的语法详解、匹配字符串的3个方法详解、使用正则表达式的sub()方法替换字符串详解、使用正则表达式的split()方法分割字符串详解。 目录 20.3、在Python中使用正则表达式的sub()方法替换字符串详解 20.4、在Python中使用正则表达式的split()方法分割字符串详解 20.1、Python中正则表达式的语法详解关于Python中的正则表达式,准备分两个知识点讲完,今天来讲解正则表达式的语法。 正则表达式的概念:正则表达式(regular expression,简称regex或者RE),也称为归则表达式。通常用来检索、替换符合某些规则的文本。正则表达式就是记录文本规则的代码。 20.1.1、行定位符行定位符就是用来描述字符串的边界。“^”表示行的开始;“$”表示行的结尾。 例如: One is All? ?? All is One?
20.1.2、元字符元字符就是在正则表达式中具有特殊意义的专用字符。 刚才我们所说的“^”和“$”就是元字符,在Python有下面常用元字符:.、\w、\W、\s、\S、\d、\D、\b、^、$。 各种元字符及其说明如下: .:匹配除换行符以外的任意字符 \w:匹配字母或数字或下划线或汉字 \W:匹配特殊字符,即非字母、非数字、非汉字 \s:匹配任意的空白符 \S:匹配非空白 \d:匹配数字 \D:匹配非数字,即不是数字 \b:匹配单词的开始或结束 ^:匹配字符串的开始 $:匹配字符串的结束 我们来看一个例子:
匹配以字母yi开头的单词,先匹配单词开始处(\b),然后匹配字母yi,接着匹配任意数量的字母或数字(\w*),最后匹配单词结束处(\b)。该表达式可以匹配如“yibenshu”“saneryi”“haoyige”“yi12345”等。 20.1.3、限定符在上面的元字符的例子中,使用“\w*”匹配任意数量的字母或数字。如果想匹配特定数量的数字,该如何表示呢?正则表达式为我们提供了限定符(指定数量的字符)来实现该功能。 例如,匹配6位QQ号可用如下表达式:
常用的限定符如下所示:*、+、?、{n} 、{n,}、{n,m}、[] 。 各种限定符及说明及举例如下: *?:匹配前面的字符零次或更多次。例如“zo*”能匹配“z” “zo”以及“zoo”,“*”等效于“{0,}” +?:匹配前面的字符一次或更多次。例如“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”,“+”等效于"{1,}” ??:匹配前面的字符零次或一次。例如“do(es)?”可以匹配 “do”或 “does”中的“do”,“?”等效 于 “{0,1}” {n}?:匹配前面的字符n次。例如“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food” 中的两个 o {n,}?:匹配前面的字符n次或更多次。例如“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o, 等效于“o+”,“o{0,}”则等效于“o*” {n,m}?:匹配前面的字符n到m次。其中 n<=m。最少匹配 n 次且最多匹配 m 次。例如“o{1,3}”将匹配“fooooood" 中的前三个“o”,“o{0,l}”等效于“0?”。注意在逗号和两个数之间不能有空格 20.1.4、字符集正则表达式查找数字和字母是很简单的,因为已经有了对应这些字符集合的元字符(如\d,\w),但是如果要匹配没有预定义元字符的字符集合(比如元音字母a, e, i, o, u),应该怎么办?很简单,只需要在方括号里列出它们就行了,像[aeiou]就匹配任何一个英文元音字母。 [xyz]表示匹配里面的任意一个字符。 [a-z]字符范围,匹配指定范围内的任意字符。例如“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符 [.?!]匹配标点符号“.”、“?”或“!”。也可以轻松地指定一个字符范围,像[0-9]代表的含义与\d就是完全一致的:代表一位数字;同理,[a-z0-9A-Z_]也完全等同于\w(如果只考虑英文的话)。 要想匹配给定字符串中任意一个汉字,可以使用[\u4e00-\u9fa5];如果要匹配连续多个汉字,可以使用[\u4e00-\u9fa5]+。 20.1.5、排除字符上方的字符集是匹配符合指定字符集的字符串。这里的排除字符,刚刚相反。排除字符就是匹配不符合指定字符集的字符串。在正则表达式中用“^”表示。我们在最开始的行定位符中也说到了“^”,放在开头,在这里放在方括号[]里面,表示排除的意思。如:
20.1.6、选择字符Python中的选择字符,包含着条件选择的逻辑,在这里使用“|”来表示。该字符可以理解为“或”。 如中国人的身份证号码长度为15位或者18位。如果为15位,则全为数字;如果为18位,前17位为数字,最后一位是校验位,可能为数字或字符X。 匹配身份证的表达式可以写出如下方式:
该表达式的意思是可以匹配15位数字,或者18位数字,或者17位数字和最后一位。最后一位可以是数字或者是X或者是x。 20.1.7、转移字符正则表达式中的转义字符(\)和Python中的大同小异,都是将特殊字符(如“.”“?”“\”等)变为普通的字符。 举一个IP地址的实例,用正则表达式匹配如127.0.0.1这样格式的IP地址。如果直接使用点字符,格式为:
这显然不对,因为“.”可以匹配一个任意字符。这时,不仅是127.0.0.1这样的IP,连127101011这样的字串也会被匹配出来。所以在使用“.”时,需要使用转义字符(\)。修改后,上面的正则表达式格式为:
站长在线提醒你:括号在正则表达式中也算是一个元字符。 20.1.8、分组通过上面选择字符中的例子,可以看见小括号的作用有了一定的了解。 小括号字符的第一个作用就是可以改变限定符的作用范围,如“|”“*”“^”等。来看下面的一个表达式。 ?(mon|ma)th 这个表达式的意思是匹配单词month或math,如果不使用小括号,那么就变成了匹配单词mon和math了。 小括号的第二个作用是分组,也就是子表达式。例如(\.[0-9]{1,3}){3},就是对分组(\.[0-9]{1,3})进行重复操作。 20.1.9、在Python中使用正则表达式语法在Python中使用正则表达式时,是将其作为模式字符串使用的。例如,将匹配不是字母的一个字符的正则表达式表示为模式字符串,可以使用下面的代码: ?'[^a-zA-Z]' 而如果将匹配以字母m开头的单词的正则表达式转换为模式字符串,则不能直接在其两侧添加引号定界符,例如,下面的代码是不正确的。 '\bm\w*\b' 而是需要将其中的“\”进行转义,转换后的代码为: '\\bm\\w*\\b' 由于模式字符串中可能包括大量的特殊字符和反斜杠,所以需要写为原生字符串,即在模式字符串前加r或R。例如,上面的模式字符串采用原生字符串表示就是: r'\bm\w*\b' 在编写模式字符串时,并不是所有的反斜杠都需要进行转换。例如,前面编写的正则表达式“^\d{6}$”中的反斜杠就不需要转义,因为其中的\d并没有特殊意义。不过,为了编写方便,本教程所写正则表达式都采用原生字符串表示。 20.2、在Python中匹配字符串的3个方法详解匹配字符串可以使用re模块提供的match()、search()和findall()等方法。下面分别进行介绍。 20.2.1、使用match()方法进行匹配match()方法用于从字符串的开始处进行匹配,如果在起始位置匹配成功,则返回Match对象,否则返回None。其语法格式如下:
其中,相关参数说明如下: 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_”开头,不区分字母大小写,代码如下:
运行结果如下:
从上面的执行结果中可以看出,字符串“ZZ_MALL”是以“zz_”开头,所以返回一个Match对象,而字符串“项目名称 ZZ_MALL zz_mall”不是以“zz_”开头,所以返回None。这是因为match()方法从字符串的开始位置开始匹配,当第一个字母不符合条件时,则不再进行匹配,直接返回None。 Match对象中包含了匹配值的位置和匹配数据。其中,要获取匹配值的起始位置可以使用Match对象的start()方法;要获取匹配值的结束位置可以使用end()方法;通过span()方法可以返回匹配位置的元组;通过string属性可以获取要匹配的字符串。例如下面的代码:
运行结果如下:
下面实例,讲解一个判定的手机号码是不是有效的中国移动的号码。
运行结果如下:
20.2.2、使用search()方法进行匹配search()方法用于在整个字符串中搜索第一个匹配的值,如果在起始位置匹配成功,则返回Match对象,否则返回None。其语法格式如下:
其中,相关参数说明如下: pattern:表示模式字符串,由要匹配的正则表达式转换而来。 string:表示要匹配的字符串。 flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。常用的标志前面说了。 例如,搜索第一个以“zz_”开头的字符串,不区分字母大小写,代码如下:
运行结果如下:
20.2.3、使用findall()方法进行匹配findall()方法用于在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回。如果匹配成功,则返回包含匹配结构的列表,否则返回空列表。其语法格式如下:
其中,相关参数说明如下: pattern:表示模式字符串,由要匹配的正则表达式转换而来。 string:表示要匹配的字符串。 flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。常用的标志上面有了。 例如,搜索以“zz_”开头的字符串,不区分字母大小写,代码如下:
运行结果为:
上方下面这个结果只有一个,因为我使用了默认的设置,进行区分大小写了。 20.3、在Python中使用正则表达式的sub()方法替换字符串详解在Python中使用正则表达式的sub()方法替换字符串。其语法格式如下:
参数说明如下: pattern:表示模式字符串,由要匹配的正则表达式转换而来。 repl:表示替换的字符串。 string:表示要被查找替换的原始字符串。 count:可选参数,表示模式匹配后替换的最大次数,默认值为0,表示替换所有的匹配。 flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。 例如:
运行结果如下:
我们再来看一个替换的例子:
运行结果为:
好了,到此为止,在Python中使用正则表达式的sub()方法替换字符串详解就讲解完毕了,本知识点内容比较少,希望不会难到大家。 20.4、在Python中使用正则表达式的split()方法分割字符串详解使用正则表达式分割字符串 在Python中使用正则表达式的split()方法用于实现根据正则表达式分割字符串,并以列表的形式返回。其作用与《在Python中使用split()方法分割、使用join()方法合并字符串详解》介绍的字符串对象的split()方法类似,所不同的就是分割字符由模式字符串指定。其语法格式如下:
其中,相关参数说明如下: pattern:表示模式字符串,由要匹配的正则表达式转换而来。 string:表示要匹配的字符串。 maxsplit:可选参数,表示最大的拆分次数。 flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。 示例代码:
运行结果为:
到此为止,在Python中使用正则表达式的split()方法分割字符串详解,就讲解完毕了,有不懂的可以留言哦! 相关阅读: 站长百科词条:Python?(知识汇总) 1、认识python 11、Python中的选择语句 12、Python中的循环语句 13、Python中的break语句、continue语句和pass语句 15、Python中的列表 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 4:14:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |