41-python-re模块

import re

# findall
# search
# match


# 1. findall :  返回所有满足条件的结果,放在列表中
ret = re.findall('[a-z]+','abc def z')
print(ret)      # 打印结果:['abc', 'def', 'z']

# 2. search  :  从前往后,找到一个就返回,返回的变量需要调用 group 才能拿到结果
                # 如何没有找到,就返回 None ,调用 group 的话会报错
ret = re.search('a','abc def z')
print(ret.group())      # 打印结果:a

# 3. match   :  从头开始匹配,如果正则规则从头开始可以匹配上,就返回一个变量,
                # 匹配的内容需要 group 才能显示
                # 如何没有匹配结果,返回None ,调用 group 会报错
ret = re.match('[a-z]+','abc def z')
if ret:
    print(ret.group())      # 打印结果:abc

 

# 4. split()        # 分割
ret = re.split('[ab]','abcd')
    # 先按 'a' 分割得到 '' 和 'bcd' ,在对 '' 和 'bcd' 分别按 'b' 分割
print(ret)          # 打印结果:['', '', 'cd']

# 5. sub()          # 用于替换字符串中的匹配项
                    # 最后一个参数是替换的个数,不写的话默认全替换
ret = re.sub('\d','H','abc1d2e3',1)     # 将 字符中的数字替换成 H
print(ret)      # 打印结果:abcHd2e3

# 5.1 subn()        # 与 sub 一样,但是会返回一个替换几次的结果
ret = re.subn('\d','H','abc1d2e3',1)     # 将 字符中的数字替换成 H
print(ret)      # 打印结果:('abcHd2e3', 1)

  

# 6. compile()      # 将正则表达式编译成一个正则表达式对象
obj = re.compile('\d{3}')
    # 将 正则表达式编译成一个 正则表达式对象,规则:要匹配的是三个数字
ret = obj.search('abc123sdfssdf')
print(ret.group())      # 打印结果 : 123

  

# 7. finditer()     # 返回一个迭代器
ret = re.finditer('\d','k1j23lj34ql')
print(ret)      # 打印结果:<callable_iterator object at 0x000001ADBCE95B38>
print(next(ret).group())             # 打印结果: 1            # 查看第一个结果
print(next(ret).group())             # 打印结果: 2            # 查看第二个结果
print([i.group() for i in ret])     # 打印结果: ['3', '3', '4']    # 查看剩余结果

  

# 8. ?:     # 取消分组优先
    # 无分组的 findall()
ret = re.findall('www.(baidu|taobao).com','www.baidu.com')
print(ret)      # 打印结果 : ['baidu']

    # 有分组的 findall()
ret = re.findall('www.(?:baidu|taobao).com','www.baidu.com')
print(ret)      # 打印结果 : ['www.baidu.com']

                # findall()
# -------------------- --------- -------------- -----------
                # split()
    # 无分组的 split()
ret = re.split('\d+','asdg332sgdt89daf')
print(ret)      # 打印结果:['asdg', 'sgdt', 'daf']

    # 有分组的 split()
ret = re.split('(\d+)','asdg332sgdt89daf')
print(ret)      # 打印结果:['asdg', '332', 'sgdt', '89', 'daf']


# 命名:   ?P<q> ---  'q'
ret = re.search('\d(?P<q>\w+)','asd123zxc43t')
print(ret.group('q'))

  

# ? 三种用法:
# 1. 在 量词 中:匹配 零次 或 一次
# 2. 在 量词 后面:惰性匹配的标志
# 3. 在 分组 第一个加 (?:abc\asd) : 取消分组优先










posted @ 2018-10-28 21:02  _Q  阅读(93)  评论(0)    收藏  举报