一、简介
正则表达式本身是一种小型的、高度专业化的编程语言,而在Python中,主要集成在re模块,可以通过调用该模块实现正则匹配;该模块主要涵盖了6大函数,下面将围绕该6大函数详细介绍。
二、正则表达式中常用字符含义
三、re模块中常用函数
1、compile
主要用于编译正则表达式,返回一个对象的模式,供 match() 、search() 、findall()等函数使用,语法格式如下:
re.compile(pattern,flags)
参数:
pattern: 一个字符串形式的正则表达式
flags: 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
re.I:忽略大小写
re.M:多行模式
importre
line='Tina is a good girl, she is cool, clever, and so on...'
#用于匹配包含'oo'的单词
pattern=re.compile(r'\w*oo\w*')
#查找所有包含'oo'的单词
print(pattern.findall(line))
执行结果如下:
['good','cool']
2、match
主要从字符串的起始位置匹配一个模式,匹配成功re.match方法返回一个匹配的对象,否则返回None。函数语法如下:
re.match(pattern,string,flags)
参数:
pattern: 匹配的正则表达式
string: 要匹配的字符串
flags: 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写、多行匹配等。
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
importre
line='Cats are smarter than dogs'
matchObj=re.match(r'(.*) are (.*?) .*',line,re.M|re.I)
ifmatchObj:
print('matchObj.group() : ',matchObj.group())
print('matchObj.group(1) : ',matchObj.group(1))
print('matchObj.group(2) : ',matchObj.group(2))
else:
print('No match!!')
执行结果如下:
matchObj.group():Cats are smarter than dogs
matchObj.group(1):Cats
matchObj.group(2):smarter
3、search
该函数会匹配整个字符串,直到找到第一个匹配然后返回,如果字符串没有匹配,则返回None,函数语法如下:
re.search(pattern,string,flags)
参数:
pattern: 匹配的正则表达式
string: 要匹配的字符串
flags: 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写、多行匹配等。
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
importre
obj='123abc456'
searchObj=re.search(r'([0-9]*)([a-z]*)([0-9]*)',obj)
ifsearchObj:
print('searchObj.group() : ',searchObj.group())
print('searchObj.group(1) : ',searchObj.group(1))
print('searchObj.group(2) : ',searchObj.group(2))
print('searchObj.group(3) : ',searchObj.group(3))
else:
print('Nothing found!!')
执行结果如下:
searchObj.group():123abc456
searchObj.group(1):123
searchObj.group(2):abc
searchObj.group(3):456
4、findall
该函数在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表,语法格式如下:
注意: match 和 search 是匹配一次 而findall 匹配所有。
re.findall(pattern,string,flags)
参数:
pattern: 匹配的正则表达式
string: 要匹配的字符串
flags: 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写、多行匹配等。
importre
info='
baidu
'
#通过正则表达式提取网址
result=re.findall(r'baidu',info)
print(result)
执行结果如下:
['http://www.baidu.com']
5、split
该函数按照匹配的子串将字符串分割后返回列表,使用形式如下:
re.split(pattern,string,maxsplit)
参数:
pattern: 匹配的正则表达式
string: 要匹配的字符串
maxsplit: 分割次数,默认为0,不限次数。
6、sub
该函数用于替换字符串中的匹配项,并返回替换后的字符串,表达形式如下:
re.sub(pattern,repl,string)
参数:
pattern: 匹配的正则表达式
repl: 替换的字符串
string: 被查找替换的原始字符串
importre
phone='2004-800-959 #这是一个国外电话号码'
#删除字符串中的Python注释
num1=re.sub(r'#.*$','',phone)
print(num1)
执行结果如下:
2004-800-959
#删除字符串中的非数字(-)
num2=re.sub(r'\D','',phone)
print(num2)
执行结果如下:
2004800959
此次的正则表达式到这差不多结束了,感谢亲们的支持和关注。
学习与分享,关注小号
领取专属 10元无门槛券
私享最新 技术干货