熟悉正则表达式的同学们,对python中正则使用就非常游刃有余了,简单介绍下python中正则模块re

小试牛刀:

import re
result=re.match('age\:\d{1}','age:44')
print(result)
<re.Match object; span=(0, 5), match='age:4'>

匹配成功返回match object,否则None,匹配字符:age:3,不匹配 age:a,因为\d{1}表示1位数字

由于Python的字符串本身也用\转义,所以要特别注意,上述冒号之前\ 转义!

因此我们建议使用Python的r前缀,就无须考虑转义的问题了:

result=re.match(r'^\d[\w]-\d{1}','33-1')
print(result)
<re.Match object; span=(0, 4), match='33-1'>

如上,匹配到 – 无需转义.

re.match与re.search的区别:

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

re.findall

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

注意: match 和 search 是匹配一次 findall 匹配所有。如下:

import re
result=re.findall(r'love','i love you,love you ')
print(result)
['love', 'love']

正则字符串切割:

正则来切割字符串是比较常用的,例: 用不定长空格来切割字符串,或者,我们可以先将表达式编译之后匹配:

import re
pat=re.compile(r'\d+')
result=pat.findall('hello world 521,and you 666')
print(result)
['521', '666']

接着,我们可以加入 , ,:等分隔符:

import re
result=re.split(r'[\s|,|:]+','a b   c d,e,ff:err')
print(result)
['a', 'b', 'c', 'd', 'e', 'ff', 'err']

进阶 ,配合使用小括号实现(分组匹配):

import re
result=re.match(r'(^\d{3})-([\d]{5})$','333-55555')
print(result[0])
#333-55555
print(result[1])
#333
print(result[2])
#55555

注:第一个小括号匹配电话的前三位,第二小括号匹配电话后五位

编译:

当我们使用正则表达式匹配时,re模块内部会进行两个步骤:

(1)编译正则表达式,如果表达式字符串有问题,那么会报错

(2)编译通过后,去匹配字符串;

如果一个这个表达式需要多次,多个地方重复使用,那么我们可以预先编译好,之后随时调用匹配,如下:

import re
re_telphone =re.compile(r'^(\d{3})-(\d{5})$')
#我们可以方便得使用 re_telphones

注:如上所述,re_telphome为Regular Expression对象,由于编译时包含了正则表达式,所以匹配时无需给出正则表达式字符串!

总结:好好学习,天天上上!!!


Leave Your Comment

电子邮件地址不会被公开。 必填项已用*标注