站长在线Python精讲:Python中正则表达式的语法详解

    时间: 浏览:314次  来源:站长在线
导读:欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《Python中正则表达式的语法详解》。本知识点主要内容有9点:行定位符、元字符、限定符、字符集、排除字符、选择字符、转义字符、分组、在Python中使用正则表达式语法。

欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《Python正则表达式的语法详解》。本知识点主要内容有9点:行定位符、元字符、限定符、字符集、排除字符、选择字符、转义字符、分组、在Python中使用正则表达式语法。


关于Python中的正则表达式,准备分两个知识点讲完,今天来讲解正则表达式的语法。

正则表达式的概念:正则表达式(regular expression,简称regex或者RE),也称为归则表达式。通常用来检索、替换符合某些规则的文本。正则表达式就是记录文本规则的代码

1、行定位符

行定位符就是用来描述字符串的边界。“^”表示行的开始;“$”表示行的结尾。

例如:

One is All    

All is One 



^One该表达式表示要匹配字符串One的开始位置是行头,如One is All就可以匹配,而All is One则不匹配。但如果使用:

One$则All is One可以匹配,而One is All不能匹配。如果要匹配的字符串可以出现在字符串的任意部分,那么可以直接写成:

One这样,两个字符串就都可以匹配了。

2、元字符

元字符就是在正则表达式中具有特殊意义的专用字符。

刚才我们所说的“^”和“$”就是元字符,在Python有下面常用元字符:.、\w、\W、\s、\S、\d、\D、\b、^、$。

各种元字符及其说明如下:

.:匹配除换行符以外的任意字符

\w:匹配字母或数字或下划线或汉字

\W:匹配特殊字符,即非字母、非数字、非汉字

\s:匹配任意的空白符

\S:匹配非空白

\d:匹配数字

\D:匹配非数字,即不是数字

\b:匹配单词的开始或结束

^:匹配字符串的开始

$:匹配字符串的结束

我们来看一个例子:

\byi\w*\b

匹配以字母yi开头的单词,先匹配单词开始处(\b),然后匹配字母yi,接着匹配任意数量的字母或数字(\w*),最后匹配单词结束处(\b)。该表达式可以匹配如“yibenshu”“saneryi”“haoyige”“yi12345”等。

3、限定符

在上面的元字符的例子中,使用“\w*”匹配任意数量的字母或数字。如果想匹配特定数量的数字,该如何表示呢?正则表达式为我们提供了限定符(指定数量的字符)来实现该功能。

例如,匹配6位QQ号可用如下表达式:

^\d{6}$

常用的限定符如下所示:*、+、?、{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?”。注意在逗号和两个数之间不能有空格

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]+。


5、排除字符

上方的字符集是匹配符合指定字符集的字符串。这里的排除字符,刚刚相反。排除字符就是匹配不符合指定字符集的字符串。在正则表达式中用“^”表示。我们在最开始的行定位符中也说到了“^”,放在开头,在这里放在方括号[]里面,表示排除的意思。如:

[^a-zA-Z]表示用于一个匹配非字母的字符。


6、选择字符

Python中的选择字符,包含着条件选择的逻辑,在这里使用“|”来表示。该字符可以理解为“或”。

如中国人的身份证号码长度为15位或者18位。如果为15位,则全为数字;如果为18位,前17位为数字,最后一位是校验位,可能为数字或字符X。

匹配身份证的表达式可以写出如下方式:

(^\d{15}$)|(^\d{18}$)|(^\d{17})(\d|X|x)$

该表达式的意思是可以匹配15位数字,或者18位数字,或者17位数字和最后一位。最后一位可以是数字或者是X或者是x。


7、转移字符

正则表达式中的转义字符(\)和Python中的大同小异,都是将特殊字符(如“.”“?”“\”等)变为普通的字符。

举一个IP地址的实例,用正则表达式匹配如127.0.0.1这样格式的IP地址。如果直接使用点字符,格式为:

[1-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}

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

[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

站长在线提醒你:括号在正则表达式中也算是一个元字符。


8、分组

通过上面选择字符中的例子,可以看见小括号的作用有了一定的了解。

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

 (mon|ma)th

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

小括号的第二个作用是分组,也就是子表达式。例如(\.[0-9]{1,3}){3},就是对分组(\.[0-9]{1,3})进行重复操作。



9、在Python中使用正则表达式语法

在Python中使用正则表达式时,是将其作为模式字符串使用的。例如,将匹配不是字母的一个字符的正则表达式表示为模式字符串,可以使用下面的代码:

 '[^a-zA-Z]'

而如果将匹配以字母m开头的单词的正则表达式转换为模式字符串,则不能直接在其两侧添加引号定界符,例如,下面的代码是不正确的。

'\bm\w*\b'

而是需要将其中的“\”进行转义,转换后的代码为:

'\\bm\\w*\\b'

由于模式字符串中可能包括大量的特殊字符和反斜杠,所以需要写为原生字符串,即在模式字符串前加r或R。例如,上面的模式字符串采用原生字符串表示就是:

r'\bm\w*\b'

在编写模式字符串时,并不是所有的反斜杠都需要进行转换。例如,前面编写的正则表达式“^\d{6}$”中的反斜杠就不需要转义,因为其中的\d并没有特殊意义。不过,为了编写方便,本教程所写正则表达式都采用原生字符串表示。

到此为止,本文学习的《Python中正则表达式的语法详解》中的主要内容有9点:行定位符、元字符、限定符、字符集、排除字符、选择字符、转义字符、分组、在Python中使用正则表达式语法。就全部讲解完毕了。有问题,可以给我留言哦!

下一个知识点,我们讲解《在Python中使用re模块实现正则表达式操作详解》。欢迎你对站长在线进行关注,评论,点赞,分享、转发!

本文地址:https://www.olzz.com/pythonzhengzebiaodashideyufa.html
码字不易,打个赏呗
站长在线小编感谢你的支持!

猜你喜欢

域名pythonw.cn出售

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

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


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

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

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


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

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

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


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

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

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


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

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

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


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

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

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


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

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

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


Python常用英语及用法

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

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


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

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

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


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

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

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