700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python中正则表达式的默认匹配方式为_Python模式匹配与正则表达式

python中正则表达式的默认匹配方式为_Python模式匹配与正则表达式

时间:2019-11-10 11:07:16

相关推荐

python中正则表达式的默认匹配方式为_Python模式匹配与正则表达式

1.1 不用正则表达式来匹配文本

假设我希望在一个字符串中找到电话号码,电话号码的格式为三个数字,一个短横线,四个数字,一个短横线,四个数字 比如:131-3310-5293和132-2670-9864

def IsTruePhoneNumber(content):

if(len(content))!=13: #首先判断号码长度是否超过13,算上短横线长度

return False

for i in range(0,3): #判断前三位字符是否为数字

if not content[i].isdecimal():

return False

if content[3]!='-': #判断第四位字符是否为短横线,不是则返回错误

return False

for i in range(4,8):

if not content[i].isdecimal():

return False

if content[8]!='-':

return False

for i in range(9,13):

if not content[i].isdecimal():

return False #python里面严格区分False和True的首字母大写

return True

account='Please call me at 131-3310-5293 and my another telephone number is 132-2670-9864'

for i in range(len(account)):

number=account[i:i+13]

if IsTruePhoneNumber(number):

print('Phone Number is '+number)

print('It is accomplished')

#print('There will be a piece of phonenumber:')

#print(IsTruePhoneNumber(content))

结果如图:

1.2 用正则表达式查找文本模式

正则表达式,简称为regex

,是文本模式的描述方法。例如,\d 是一个正则表达式,表示一位数字字符,即表示任何一位 0 到 9 的数字。Python 使用正则表达式 \d\d\d-\d\d\d-\d\d\d\d,来匹配前面的函数IsTruePhoneNumber()与之相对应的同样文本:3 个数字、 一个短横线、4个数字、1个短横线、4 个数字。所有其它字符串都不能匹配 \d\d\d-\d\d\d\d-\d\d\d\d 正则表达式。

正则表达式可以更加复杂

,添加一个用得着的功能,比如在一个模式后面添加花括号\d{3},意思为匹配这个模式三次,可以应用在配对密码方面

1.2.1创建正则表达式对象

Python中所有的正则表达式都在re模块中,所以必须先通过import来引入re模块

向re模块中的pile()中创建一个字符串作为参数来表示正则表达式,此时将返回一个regex对象,比如,创建一个regex对象来匹配上一个IsPhoneTRUENumber()函数

1.2.2 匹配Regex对象

Regex的research()方法用来寻找与正则表达式匹配的所有对象,如果没有找到,research()方法将返回None,显示错误。如果找到,search()方法将返回一个Match对象。Match对象有一个group()方法用来返回寻找到的已匹配的文本

1.3 用正则表达式匹配更多模式

1.3.1 利用括号分组

假如分离电话号码中的运营商号段,前三位可以区别是哪个运营商,电信,联通或者移动,可以将号码分为两段。正则表达式作为参数的字符串中的第一对括号是第 1 组,第二对括号是第 2 组。通过 group() 方法匹配对象传入整数1或2,就可以取得匹配文本的不同部分。向 group()方法传入0或不传入参数,将返回整个匹配的文本。

如果想要一次性得到分离的两段字符串,就可以利用groups()方法,也可以采用两个变量来利用groups()方法分别赋值第一段和第二段

如果

需要在正则表达式中添加括号,则可以用转义字符\

1.3.2 利用管道匹配多个分组

字符

|

称为管道,用来匹配多个分组中的一个时,类似于C语言中的或,就可以使用它来进行此项操作,但是返回的是第一个匹配到的对象

也可以用来匹配多个模式中的一个,作为正则表达式的一部分,比如:everywhere,everyone,everytime,everyday。提取它们共同的前缀 every(如果需要匹配换到字符,则添加倒斜杠 |)

1.3.3 利用问号实现选择匹配

(字符串)?字符串

为选择模式,即添加?前面的或者不添加问号前面的。?即匹配这个?前的分组零次或一次。比如:

还可以进行多模式匹配

1.3.4 利用星号实现匹配

利用

*

实现匹配*前面的分组零次或多次

1.3.5 利用加号实现匹配

利用+实现分组匹配,即+前的分组出现一次或多次,至少出现一次,如果未出现,则返回None

1.3.6 用花括号实现匹配

花括号可以规定分组的匹配次数,不符合要求则返回空或者规定的最大模式匹配次数的模式,分组中只能包含要求匹配的模式,否则返回空

格式为(模式){匹配次数} 比如(模式){3,5}则表示模式匹配次数从3到5 (){,5}则表示模式匹配次数从0到5 (){3,}则表示模式匹配次数为从3到更多次数

1.4 贪心匹配和非贪心匹配

贪心匹配尽可能匹配最多的实例,非贪心匹配尽可能匹配最少的实例

非贪心匹配在花括号后加?(问号)在正则表达式末尾加,或者是你想选择的模式后加

1.5 findall()方法

Regex对象除了有search()方法,还有findall()方法,search()方法返回的是第一次匹配正则表达式的模式,findall()方法返回的是正则表达式匹配到的所有模式。

(1)如果正则表达式中没有分组,则返回的为包含字符串的列表

(2)如果正则表达式中有分组,则返回的是包含元组的列表

(1)

(2)

1.6 字符分类

\d 0-9内的任意数字

\D 除0-9内的任意数字

\w 任何字母、数字或下划线字符

\W 除字母、数字或下划线以外的任何字符

\s 空格、制表符或换行符

\S 除空格、制表符或换行符以外的任何字符

正则表达式\d+\s\w+匹配的文本有一个或多个数字(\d+),不加加号默认为匹配一个,接下来是一个空白字 符(\s),接下来是一个或多个字母/数字/下划线字符(\w+)。findall()方法将返回所有匹 配该正则表达式的字符串,放在一个列表中。

1.7 建立自己的字符分类

可以使用方括号来建立自己想匹配的正则表达式,格式为[匹配模式]

(1)也可以使用短横线来划定范围,比如[0-99a-zA-Z],表示为从0到99,从a到z的所有小写字母,A到Z的所有大写字母

(2)在方括号内,普通的正则表达式符号不会被解释,不需要加转义字符,可以直接使用,例如 [0-5,]不需要这样写,直接写为[0-5,]

(3)还可以使用

^

来表达非字符类,比如[^ban]来表示为匹配除ban以外的字符

(1)效果图

(2)效果图

(3)效果图

1.8插入字符和美元字符

插入字符

^

表示模式从文本开始处匹配,美元字符

$

表示文本以该模式结束,插入字符和美元字符同时使用意味着该文本等于该正则表达式,如果不匹配则不返回

以$为结尾的正则表达式

同时以^和$结尾的正则表达式

正则表达式 '^\d+$'表示整个文本为数字

1.9 通配字符

在正则表达式中,

.

(句点)字符称为“通配符”。它匹配除了换行之外的所有字符。. 字符只能代替一个字符

1.9.1 .* 匹配所有字符串

(星号)表示

以前的字符出现零次或多次,.(句号)表示匹配除换行外的所有字符,即匹配所有字符串

注意大小写

(.

?)意味匹配尽可能小的模式

<.

>意为“匹配一个左尖括号,接下来是任意字符,接下来是一个右尖括号”,匹配尽可能多的模式。加问号匹配尽可能少的模式

1.9.2 利用句点字符匹配换行(re.DOTALL)

如果不加re.DOTALL,则只匹配换行符以前的。加re.DOTALL后,则匹配所以字符串

1.10 大小写不区分的匹配

在验证图片中字母的时候,只涉及匹配字母,不关心它们是大写或小写。要让正则表达式 不区分大小写,可以向 pile()传入 re.IGNORECASE 或 re.I,作为第二个参数。

1.11 利用sub()方法替换字符串

正则表达式不但可以找到文本模式,而且可以用新的文本替换掉这些模式。Regex 对象的 sub()方法需要传入两个参数。第一个参数是一个字符串,用于取代发现的匹配。第二个参数是一个字符串,即 正则表达式,用于匹配需要找到的字符串。sub()方法返回替换完成后的字符串。

1.12管理复杂的正则表达式

如果要匹配的文本模式很简单,正则表达式就很好。但匹配复杂的文本模式, 可能需要长的、复杂的正则表达式。你可以告诉 pile(),忽略正则表达式字符串中的空白符和注释,从而缓解这一点。要实现这种详细模式,可以向 pile() 传入变量 re.VERBOSE,作为第二个参数。

例如:只需在正则表达式每行后面加 #注释即可

1.13 组合使用类似变量re.IGNORECASE,可以使用管道符

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。