re模块

 

# re模块
# findall
# search
# match

import re

# findall 所有满足条件的放在列表中
ret = re.findall('a', 'eva egon yuan')
print(ret)

ret = re.findall('[a-z]+', 'eva egon yuan')
print(ret)

# seach 从前往后,找到一个就返回,返回一个对象,需要调用group才能拿到结果
# 如果没有找到,返回None,调用group会报错
ret = re.search('[a-z]+', 'eva egon yuan')
if ret:
    print(ret.group())

# match 从头开始匹配,如果正则规则从头开始可以匹配上,返回对象
# 如果从头没匹配上,返回None
ret = re.match('ev', 'eva egon yuan')
if ret:
    print(ret.group())

# split
ret = re.split('[ab]', 'abcd')  # 先按a分割,再按b分割
print(ret)

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

# subn
ret = re.subn('\d', 'H', 'eva123fi23yan2')  # 产生将数字替换成'H'后的结果和替换个数的列表
print(ret)

# compile
obj = re.compile('\d{3}')  # 将正则表达式变异成一个正则表达式对象
ret = obj.search('abc123eee223')
ret1 = obj.findall('abc123eee2233')
print(ret1)
print(ret.group())

# finditer
ret = re.finditer('\d', 'ds3sy3123a')  # finditer返回一个存放匹配结果的迭代器
print(ret.__next__().group())
print(next(ret).group())
# for i in ret:
#     print(i.group())
print([i.group() for i in ret])

# 分组优先
ret = re.findall('www.(baidu|oldboy).com', 'www.oldboy.com')
ret1 = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com')
print(ret)
print(ret1)

ret = re.split('([ab])', 'abcd')  # 加了分组,保存分组内容
print(ret)

'''
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字符串可以是多行的,忽略空白字符,并可以添加注释
'''

 

posted @ 2020-04-04 17:37  vivagoal  阅读(126)  评论(0)    收藏  举报