re模块正则表达式

正则表达式是特殊的字符序列,方便检查和使用一个字符串与某重模式匹配,或是找出与之匹配的结果。
re模块:正则表达式
方法:
re.match() 从起始位置开始匹配,如果不是起始位置,就返回None
re.search() 可以不从起始位置匹配,但是从起始位置扫描,返回第一个匹配的结果
group()和groups() 把上面两种方法匹配的结果取出来。group返回一个长字符串,groups()返回一个分组。
下面演示
re.match()和re.search()
区别

import re
name = 'hi i am liutao'
ret1 = re.match('hi',name)
#match()方法匹配第一个hi
ret2 = re.match('liutao',name)
#match()方法匹配最后一个liutao
print(ret1)
print(ret2)

result1 = re.search('hi',name)
#search()方法匹配第一个hi
result2 = re.search('liutao',name)
#search()方法匹配最后一个刘涛
print(result1)
print(result2)

运行结果:

<re.Match object; span=(0, 2), match='hi'>
None
#match()方法从起始位置开始
<re.Match object; span=(0, 2), match='hi'>
<re.Match object; span=(8, 14), match='liutao'>
#search()方法不从其实起始位置开始

group()和groups()

import re
str_html = 'baidu:www.baidu.com'

pattern = '(.*):(.*)'
ret = re.search(pattern,str_html)
#匹配字符串分成两个组

result = ret.group()
print(type(result))
print(result)
#group()方法

result = ret.groups()
print(type(result))
print(result)
#groups()方法

运行结果

<class 'str'>
baidu:www.baidu.com
#group()返回的是一个字符串

<class 'tuple'>
('baidu', 'www.baidu.com')
#groups()返回一个内含几个字符串的元组,每一个字符串代表被分好的一个组

sub()方法:
用于检索和替换字符串中的匹配项
实例:

str_html = 'baidu:www.sogou.com'

pattern = '\..*\.'
#匹配规则\代表把点转义
rep1 = '\.baidu\.'
#替换成的字符串
ret = re.sub(pattern,rep1,str_html)
print(ret)

运行结果:

www.baidu.com
#把错误网站sogou替换成百度

在re.sub()方法中,替换字符目标,也可以删除符合模式的字符,只要把rep1改成空字符就可以了。
re.findall()方法
可以理解为find all 寻找所有,用于匹配字符串中所有符合模式的目标,然后返回一个列表。
re.findall()有两种匹配方法:
第一种是贪婪匹配,尽可能多的匹配字符结果。
第二种是非贪婪匹配,尽可能少的匹配字符结果,但是还是会返回符合模式所有的字符串

import re
name = '''
name:ben,age:15,name:tom,age:16
'''
#我们想匹配 name:xx,先用贪婪匹配
ret = re.findall('(name):(.*),',name)
print(ret)
#再用非贪婪匹配
result = re.findall('(name):(.*?),',name)
print(result)

运行结果

[('name', 'ben,age:15,name:tom')]
#贪婪匹配运行结果
[('name', 'ben'), ('name', 'tom')]
非贪婪匹配运行结果

可以注意到,贪婪匹配只返回一个结果,一个带有字符串元组的列表
而非贪婪匹配返回一个或者多个含元组的列表
这里引进一个re.finditer()就是生成一个可迭代对象用于处理大量的数据的时候使用的生成器。
re.compile()方法
生成一个pattern正则表达式供match()和search()使用
re.split()方法
在字符串中也有split方法,但是他只能有一个方法切割,re可以有多种方法。

import re
name = '''
name:ben,tom,liutao
'''
ret = re.split('[,:]',name)
#用:,切割
print(ret)

运行结果:

['\nname', 'ben', 'tom', 'liutao\n']

当然,正则表达式的使用还可以配合各种各样的模式,特殊字符和修饰符,内容太多不一一解释。
——每一份梦想都值得去尊重;
——每一次努力都会获得回报;
——加油吧,少年!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值