• Python re 模块


    ---------------------------------------------------------------------------------------------------------------

    regex = compile(pattern,flags = 0)
     功能: 生成正则表达式对象
     参数: pattern  正则表达式
          flags  功能标志位,扩展正则表达式的匹配
     返回值: 正则表达式对象

    re模块与正则表达式对象拥有的"相同"方法: 

    findall split sub subn finditer fullmatch match search

    compile对象属性

    【1】 pattern : 正则表达式
    【2】 groups : 子组数量
    【3】 groupindex : 捕获组名与组序号的字典

    ------------------------------------------------------------------------------------------------------------

    re.findall(pattern,string,flags = 0)
     功能: 根据正则表达式匹配目标字符串内容
     参数: pattern  正则表达式
          string 目标字符串
          flags  功能标志位,扩展正则表达式的匹配
     返回值: 匹配到的内容列表,如果正则表达式有子组则只能获取到子组对应的内容
    regex.findall(string,pos,endpos)
     功能: 根据正则表达式匹配目标字符串内容
     参数: string 目标字符串
          pos 截取目标字符串的开始匹配位置
          endpos 截取目标字符串的结束匹配位置
     返回值: 匹配到的内容列表,如果正则表达式有子组则只能获取到子组对应的内容

      

    import re
    s = "Alex:1994,Sunny:1999"
    
    # findall返回匹配到的内容字符串列表
    print(re.findall(r'w+:d+', s))        # ['Alex:1994', 'Sunny:1999']
    
    # findall返回匹配到的子组元组列表
    print(re.findall(r'(w+):(d+)', s))    # [('Alex', '1994'), ('Sunny', '1999')]
    
    # 当只有一个子组时, 返回的是子组字符串列表
    print(re.findall(r'(w+):d+', s))      # ['Alex', 'Sunny']
    findall

    -----------------------------------------------------------------------------------------------------------------------------------------

    re.split(pattern,string,flags = 0)
    功能: 使用正则表达式匹配内容,切割目标字符串
    参数: pattern  正则表达式
         string 目标字符串
         flags  功能标志位,扩展正则表达式的匹配
    返回值: 切割后的内容列表
    re.sub(pattern,replace,string,max,flags = 0)
     功能: 使用一个字符串替换正则表达式匹配到的内容
     参数: pattern  正则表达式
          replace  替换的字符串
          string 目标字符串
          max  最多替换几处,默认替换全部
          flags  功能标志位,扩展正则表达式的匹配
     返回值: 替换后的字符串
    re.subn(pattern,replace,string,max,flags = 0)
     功能: 使用一个字符串替换正则表达式匹配到的内容
     参数: pattern  正则表达式
          replace  替换的字符串
          string 目标字符串
          max  最多替换几处,默认替换全部
          flags  功能标志位,扩展正则表达式的匹配
     返回值: 替换后的字符串和替换了几处
    print(re.split(r'[,:]',s))              # ['Alex', '1994', 'Sunny', '1999']
    
    print(re.subn(r':','-',s,1))            # ('Alex-1994,Sunny:1999', 1)
    split_sub_subn

    -----------------------------------------------------------------------------------------------------------------------------------------

    re.finditer(pattern,string,flags = 0)
     功能: 根据正则表达式匹配目标字符串内容
     参数: pattern  正则表达式
          string 目标字符串
          flags  功能标志位,扩展正则表达式的匹配
     返回值: 匹配结果的迭代器
    re.fullmatch(pattern,string,flags=0)
    功能:完全匹配某个目标字符串
    参数:pattern 正则
    	string  目标字符串
    返回值:匹配内容match object
    re.match(pattern,string,flags=0)
    功能:匹配某个目标字符串开始位置
    参数:pattern 正则
    	string  目标字符串
    返回值:匹配内容match object
    re.search(pattern,string,flags=0)
    功能:匹配目标字符串第一个符合内容
    参数:pattern 正则
    	string  目标字符串
    返回值:匹配内容match object
    finditer fullmatch match search

         --->   会生成match对象    ---> match对象的属性与方法有:  

    属性变量 end endpos string re lastgroup lastindex
    属性方法 span start end groupdict groups group
    import re
    
    s = "今年是2019年,建国70周年"
    
    pattern = r"d+"
    # 返回迭代对象
    it = re.finditer(pattern,s)
    for i in it:
        print(i.group()) # 获取match对象对应内容  # 2019 70
    
    # 完全匹配
    obj = re.fullmatch(r'.+',s)
    print(obj.group())                          # 今年是2019年,建国70周年
    
    # 匹配开始位置
    obj = re.match(r'w+',s)
    print(obj.group())                          # 今年是2019年
    
    # 匹配第一处
    obj = re.search(r'd+',s)
    print(obj.group())                          # 2019
    finditer_fullmatch_match_search

    一个match对象对应一个匹配到的内容.

    fullmatch方法如果没有匹配到内容, 则返回的是一个None, 而None没有group等方法, 此时调用group方法会报错.

    it  ---> <callable_iterator object at 0x7f839ef58748>
    i  ---> <_sre.SRE_Match object; span=(3, 7), match='2019'>
    i  ---> <_sre.SRE_Match object; span=(11, 13), match='70'>

    --------------------------------------------------------------------------------------------------------------------------------------------------------------

     match对象的属性和方法

    1. 属性变量
    • pos 匹配的目标字符串开始位置
    • endpos 匹配的目标字符串结束位置
    • re 正则表达式
    • string 目标字符串
    • lastgroup 最后一组的名称
    • lastindex 最后一组的序号
    1. 属性方法
    • span() 获取匹配内容的起止位置

    • start() 获取匹配内容的开始位置

    • end() 获取匹配内容的结束位置

    • groupdict() 获取捕获组字典,组名为键,对应内容为值

    • groups() 获取子组对应内容

    • group(n = 0)

      功能:获取match对象匹配内容
      参数:默认为0表示获取整个match对象内容,如果是序列号或者组名则表示获取对应子组内容
      返回值:匹配字符串
    import re
    
    pattern = r"(ab)cd(?P<pig>ef)"
    regex = re.compile(pattern)
    obj = regex.search("abcdefghi")  # match对象
    
    # 属性变量
    print(obj.pos)  # 目标字符串开始位置     # 0
    print(obj.endpos) # 目标字符串结束位置   # 9
    print(obj.re)  # 正则                 # re.compile('(ab)cd(?P<pig>ef)')
    print(obj.string) # 目标字符串         # abcdefghi
    print(obj.lastgroup) # 最后一组组名    # pig
    print(obj.lastindex) # 最后一组序号    #2
    
    print("=====================================")
    # 属性方法
    print(obj.span()) # 匹配到的内容在目标字符串中的位置    # (0, 6)
    print(obj.start())                               # 0
    print(obj.end())                                 # 6
    print(obj.groups()) # 子组内容对应的元组            # ('ab', 'ef')
    print(obj.groupdict()) # 捕获组字典               # {'pig': 'ef'}
    print(obj.group()) # 获取match对象内容            # abcdef
    print(obj.group('pig'))                        # ef
    match对象属性和方法

    flags扩展功能标志(只有使用re调用的方法才有flags参数 --> re.func(flags=0))

    1. 使用函数:re模块调用的匹配函数。如:re.compile,re.findall,re.search....

    2. 作用:扩展丰富正则表达式的匹配功能

    3. 常用flag

    A == ASCII 元字符只能匹配ascii码

    I == IGNORECASE 匹配忽略字母大小写

    S == DOTALL 使 . 可以匹配换行

    M == MULTILINE 使 ^ $可以匹配每一行的开头结尾位置

      1. 使用多个flag

        方法:使用按位或连接
        e.g. : flags = re.I | re.A

  • 相关阅读:
    gdal source code c++ make windows
    libjpeg安装和使用
    window 安装gdal和python
    gdal和python在windows上的安装
    将博客搬至CSDN
    ue4 Worldmachine 结合使用
    织梦学习
    前端 css html js javascript jquery
    jquery 表单验证插件
    gif动图生成
  • 原文地址:https://www.cnblogs.com/NeverYa/p/11369011.html
Copyright © 2020-2023  润新知