re模块

一、什么是模块:
常见的场景:一个模块就是一个包含了python定义和声明的文件

二、为何要使用模块:
如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久
保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。

三、模块的导入应该在程序开始的地方

四、re模块
re模块下的常用方法

import re

print(re.findall("a","eva egon yuan"))        #['a', 'a']
返回所有满足匹配条件的结果,放在列表里


print(re.search("a","eva egon yuan").group())   #a
1.函数会在字符串内查找模式匹配,直到找到第一个匹配然后返回一个包含匹配信息的对象,
2.两个参数,正则表达式和待匹配的字符串,返回的是第一个满足条件的项
该对象可以通过group()方法获取到具体的值,如果字符串没有匹配,
使用.group()会报错,所以应该在使用group防止之前做判断


print(re.match("a","aeva egon yuan").group())   #a
同search,不同的是match方法的正则自带^效果


ret = re.search("([a-z])(d)","ab2748cdef14g239")
print(ret.group())        #b2     #直接获取正则规则匹配的项,内容示意
print(ret.group(1))       #b      #如果给group传参数,那么传递的参数能够代替在正则表达式中组的次序
print(ret.group(2))       #2      #从而获取到对应次序上的值


print(re.split("[ab]","abcd"))     #['', '', 'cd']
先按”a“分割得到 " ""bcd" ,再对“bcd”进行分割 " " ,"cd"

ret = re.sub('d', 'H', 'eva3egon4yuan4', 1)#将数字替换成'H',参数1表示只替换1个 print(ret) #evaHegon4yuan4

print(re.subn(
"d","H","eva3egon4yuan4")) #('evaHegon4yuan4', 3) 将数字替换成“H”,返回元组(替换的结果,替换了多少次)


print(re.compile(
"d{3}").search('abc123eeee').group()) #123
将正则表达式编译成一个正则表达对象,规则要匹配的是3个数字 正则表达式对象调用search,
参数为待匹配的字符串


res
= re.finditer('d', 'ds3sy4784a') #<callable_iterator object at 0x000001A8D8D07860> print([i.group() for i in res])
#['3', '4', '7', '8', '4'] findier 返回一个存放匹配结果的迭代器


findall的优先级 print(re.findall(
"www.(baidu|oldboy).com","www.oldboy.com")) #['oldboy'] 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可,?:是取消权限 print(re.findall("www.(?:baidu|oldboy).com","www.oldboy.com")) #['www.oldboy.com'] print(re.findall("[a-z]d","ab2748cdef14g239")) #['b2', 'f1', 'g2'] print(re.findall("([a-z])d","ab2748cdef14g239")) #['b', 'f', 'g'] 在findall 的正则表达式中有分组,仍然按照正则规则取匹配,只不过在显示的时候,只显示分组的内容 print(re.findall("(?:[a-z])d","ab2748cdef14g239")) #['b2', 'f1', 'g2'] findall中取消分组 split的优先级查询 print(re.split("d+","eva3egon4yuan")) #['eva', 'egon', 'yuan'] print(re.split("(d+)","eva3egon4yuan")) #['eva', '3', 'egon', '4', 'yuan'] 在匹配部分加上()之后所切出的结果是不同的 没有()的没有保留所匹配的项,但是有()的却能够保留了匹配的项 这个在某些需要保留匹配部分的使用过程是非常重要的 练习题: 1.匹配标签(分组命名) import re ret = re.search("<(?P<tag_name>w+)>w+</(?P=tag_name)>","<h1>hello</h1>") print(ret.group("tag_name")) #h1 print(ret.group()) #<h1>hello</h1> 还可以在分组中利用?P<name>的形式给分组起名字 获取的匹配结果可以直接用group("名字")拿到对应的值 ret = re.search(r"<(w+)>w+</1>","<h1>hello</h1>") print(ret.group()) #<h1>hello</h1> print(ret.group(1)) #h1 如果不给组起名字。也可以利用序号来找到对应的组,表示要找的内容和前面的组内容 一致,获取的匹配结果可以直接用group(序号)拿到对应的值 2.匹配整数(有一些干扰项需要排除) import re ret = re.findall(r"-?d+.d*|(-?d+)","1-2*(60+(-40.35/5)-(-4*3))") ret.remove("") print(ret) #['1', '-2', '60', '5', '-4', '3'] 3.r取消这个字符串中转译作用 凡是出现且没有特殊意义的时候都可以在字符串的前面加上r字符 r"\n" r" " 例子:(路径和正则表达式) r"app tp" flags有很多可选值: re.I(IGNORECASE)忽略大小写,括号内是完整的写法 re.M(MULTILINE)多行模式,改变^和$的行为 re.S(DOTALL)点可以匹配任意字符,包括换行符 re.L(LOCALE)做本地化识别的匹配,表示特殊字符集 w, W, , B, s, S 依赖于当前环境,不推荐使用 re.U(UNICODE) 使用w W s S d D使用取决于unicode定义的字符属性。在python3中默认使用该flag re.X(VERBOSE)冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释


 
原文地址:https://www.cnblogs.com/lara0520/p/8503380.html