python3正则模块re的使⽤⽅法详解
⼀、正则
1.正则表达式定义
正则就是⽤⼀些具有特殊含义的符号组合到⼀起(称为正则表达式)来描述字符或者字符串的⽅法。或者说:正则就是⽤来描述⼀类事物的规则。(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成⼀系列的字节码,然后由⽤ C 编写的匹配引擎执⾏。
2.⽬的和特点
给定⼀个正则表达式和另⼀个字符串,我们可以达到如下的⽬的:
给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):
可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点是:
灵活性、逻辑性和功能性⾮常强;
可以迅速地⽤极简单的⽅式达到字符串的复杂控制。
由于正则表达式主要应⽤对象是⽂本,因此它在各种⽂本编辑器场合都有应⽤,⼩到著名编辑器EditPlus,⼤到Microsoft Word、Visual Studio等⼤型编辑器,都可以使⽤正则表达式来处理⽂本内容。
3.常⽤的正则表达式
4.贪婪模式与⾮贪婪模式
正则表达式通常⽤于在⽂本中查匹配的字符串。Python⾥数量词默认是贪婪的(在少数语⾔⾥也可能是默认⾮贪婪),总是尝试匹配尽可能多的字符;⾮贪婪的则相反,总是尝试匹配尽可能少的字符。例如:正则表达式"ab*“如果⽤于查"abbbc”,将到"abbb"。⽽如果使⽤⾮贪婪的数量词"ab*?",将到"a"。
5.反斜杠
与⼤多数编程语⾔相同,正则表达式⾥使⽤"“作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配⽂本中的字符”",那么使⽤编程语⾔表⽰的正则表达式⾥将需要4个反斜杠"\\":前两个和后两个分别⽤于在编程语⾔⾥转义成反斜杠,转换成两个反斜杠后再在正则表达式⾥转义成⼀个反斜杠。Pytho
n⾥的原⽣字符串很好地解决了这个问题,这个例⼦中的正则表达式可以使⽤r"\“表⽰。同样,匹配⼀个数字的”\d"可以写成r"\d"。有了原⽣字符串,你再也不⽤担⼼是不是漏写了反斜杠,写出来的表达式也更直观。
⼆、python3正则模块re
1.match
英语翻译成中文在线翻译match(string[, pos[, endpos]]) | re.match(pattern, string[, flags]):
Match对象是⼀次匹配的结果,包含了很多关于此次匹配的信息,可以使⽤Match提供的可读属性或⽅法来获取这些信息。
属性:
string: 匹配时使⽤的⽂本。
re: 匹配时使⽤的Pattern对象。
pos: ⽂本中正则表达式开始搜索的索引。值与Pattern.match()和Pattern.seach()⽅法的同名参数相同。
endpos: ⽂本中正则表达式结束搜索的索引。值与Pattern.match()和Pattern.seach()⽅法的同名参数相同。
lastindex: 最后⼀个被捕获的分组在⽂本中的索引。如果没有被捕获的分组,将为None。
lastgroup: 最后⼀个被捕获的分组的别名。如果这个分组没有别名或者没有被捕获的分组,将为None。
⽅法:
group([group1, …])
获得⼀个或多个分组截获的字符串;指定多个参数时将以元组形式返回。group1可以使⽤编号也可以使⽤别名;编号0代表整个匹配的⼦串;不填写参数时,返回group(0);没有截获字符串的组返回None;截获了多次的组返回最后⼀次截获的⼦串。
groups([default])oracle数据库备份策略
以元组形式返回全部分组截获的字符串。相当于调⽤group(1,2,…last)。default表⽰没有截获字符串的组以这个值替代,默认为None。
groupdict([default])
返回以有别名的组的别名为键、以该组截获的⼦串为值的字典,没有别名的组不包含在内。default含义同上。
start([group])
返回指定的组截获的⼦串在string中的起始索引(⼦串第⼀个字符的索引)。group默认值为0。
end([group])
返回指定的组截获的⼦串在string中的结束索引(⼦串最后⼀个字符的索引+1)。group默认值为0。
span([group])
返回(start(group), end(group))。
expand(template)
将匹配到的分组代⼊template中然后返回。template中可以使⽤\id或\g、\g引⽤分组,但不能使⽤编号0。\id与\g是等价的;但\10将被认为是第10个分组,如果你想表达\1之后是字符'0',只能使⽤\g<1>0。
import re
ret1 = re.match('t.{6}w', 'taaa333w123')
try:
print('匹配到的数据是:', up()) # 匹配的是⼀个group
except:
print('没有匹配到数据')
python在线编辑器python32.search
search(string[, pos[, endpos]]) | re.search(pattern, string[,flags])
这个⽅法⽤于查字符串中可以匹配成功的⼦串。从string的pos下标处起尝试匹配pattern,如果pattern结束时仍可匹配,则返回⼀个Match对象;若⽆法匹配,则将pos加1后重新尝试匹配;直到pos=endpos时仍⽆法匹配则返回None。
random uniformpos和endpos的默认值分别为0和len(string));re.search()⽆法指定这两个参数,参数flags⽤于编译pattern时指定匹配模式。ret5 = re.search('^[0-9].*', '1hello python') # ^代表以什么开头
up())
3.split,findall,finditer三个⽅法
split(string[, maxsplit]) | re.split(pattern, string[, maxsplit])
findall(string[, pos[, endpos]]) | re.findall(pattern, string[, flags])
finditer(string[, pos[, endpos]]) | re.finditer(pattern, string[, flags])
split类似string中的split⽅法,不多解释
findall()⽅法搜索string,以列表形式返回全部能匹配的⼦串。实例:
import re
p = repile(r'\d+')
print(p.findall('one1two2three3four4'))
输出
['1', '2', '3', '4']
finditer()⽅法搜索string,返回⼀个顺序访问每⼀个匹配结果(Match对象)的迭代器。实例:
import re
p = repile(r'\d+')
for m in p.finditer('one1two2three3four4'):
up(),)
输出
1
2
3
4
4.sub
sub(repl, string[, count]) | re.sub(pattern, repl, string[, count])
使⽤repl替换string中每⼀个匹配的⼦串后返回替换后的字符串。
当repl是⼀个字符串时,可以使⽤\id或\g、\g引⽤分组,但不能使⽤编号0。
当repl是⼀个⽅法时,这个⽅法应当只接受⼀个参数(Match对象),并返回⼀个字符串⽤于替换(返回的字符串中不能再引⽤分组)。
count⽤于指定最多替换次数,不指定时全部替换。
import re
p = repile(r'(\w+) (\w+)')
s = 'i say, hello world!'
print(p.sub(r'\2 \1', s))
def func(m):
up(1).title() + ' ' + m.group(2).title()
html网站头部导航如何制作print(p.sub(func, s))
pycharm社区版怎么改成中文输出
say i, world hello!
更多关于python3正则模块re的使⽤⽅法请查看下⾯的相关链接
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论