import re
# findall
# search
# match
# ret = re.findall('a','eva egon yuan')
# # 返回所有满足条件的结果,放在列表里
# print(ret)
# ret = re.search('a','eva egon yuan')
# if ret:
# print(ret.group())
# # 从前往后,找到一个就返回,返回的变量需要调用group才能拿到结果
# # 如果没有找到,那么返回None,调用group会报错
# ret = re.match('[a-z]+','eva egon yuan')
# if ret:
# print(ret.group())
# # match是从头开始匹配,如果正则从头开始可以匹配上,就返回一个变量
# # 匹配的内容需要用group才能显示
# # 如果没匹配上,就返回None,调用group会报错
# ret = re.split('[ab]','abcd')
# print(ret) # ['', 'cd']
# # 先按'a'进行分割得到''和'bcd'.分别按'b'分割
# ret = re.sub('\d','H','eva3egon4yuan4',1)
# print(ret)
# # 将数字替换成'H’,参数1表示只替换1个
# ret = re.subn('\d','H','eva3egon4yuan4')
# print(ret)
# # 将数字替换成‘H',返回元组(替换的结果,替换了多少次)
# compile 编译正则表达式成为对象
# obj = re.compile('\d{3}')
# # 将正则表达式编译成为一个正则表达式对象,规则要匹配的是3个数字
# ret = obj.search('abc123eee') # 正则表达式对象调用search,参数为待匹配的字符串
# print(ret.group()) #结果:123
# finditer 迭代
# ret = re.finditer('\d','ds3su4784a') # finditer 返回一个匹配结果的迭代器
# # print(ret) # <callable_iterator object at 0x000001BC77390E48>
# # print(next(ret).group()) # 查看第一个结果
# # print(next(ret).group()) # 查看第二个结果
# # print([i.group() for i in ret]) # 查看剩余的结果
# for i in ret:
# print(i.group())
# 分组
# ret = re.search('^[1-9](\d{14})(\d{2}[0-9x])','411403198606166078')
# print(ret.group())
# print(ret.group(1))
# print(ret.group(2)) # 正则表达式里有几个分组就可以有几个变量
注意:
1 findall的优先级查询:
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
ret = re.findall('www.(baidu|oldboy).com', 'www.oldboy.com')
print(ret) # ['oldboy']
# 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可
ret = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com')
print(ret) # ['www.oldboy.com']
2 split的优先级查询
ret=re.split("\d+","eva3egon4yuan")
print(ret) #结果 : ['eva', 'egon', 'yuan']
ret=re.split("(\d+)","eva3egon4yuan")
print(ret) #结果 : ['eva', '3', 'egon', '4', 'yuan']
#在匹配部分加上()之后所切出的结果是不同的,
#没有()的没有保留所匹配的项,但是有()的却能够保留了匹配的项,
#这个在某些需要保留匹配部分的使用过程是非常重要的。
综合练习与扩展
flags有很多可选值:
re.I(IGNORECASE)忽略大小写,括号内是完整的写法
re.M(MULTILINE)多行模式,改变^和$的行为
re.S(DOTALL)点可以匹配任意字符,包括换行符
re.L(LOCALE)做本地化识别的匹配,表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境,不推荐使用
re.U(UNICODE) 使用\w \W \s \S \d \D使用取决于unicode定义的字符属性。在python3中默认使用该flag
re.X(VERBOSE)冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释