熟悉正则表达式的同学们,对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对象,由于编译时包含了正则表达式,所以匹配时无需给出正则表达式字符串!
总结:好好学习,天天上上!!!