• 正则表达式--re模块的使用


    re模块使用

    regex=compile(pattern,flags=0)

    功能:生产正则表达式对象

    参数:pattern 正则表达式

       flags 功能标志位 扩展正则表达式的匹配

    返回值:正则表达式对象

    import re
    
    s = 'Alxe:1994,Sunny:1993'
    pattern = r'(w+):(d+)'
    
    #使用compiel对象调用
    regex=re.compile(pattern)
    l=regex.findall(s)
    print(l)
    #[('Alxe', '1994'), ('Sunny', '1993')]

    一、re.findall(pattern,string,flags=0)

    功能:根据正则表达式匹配目标字符串内容

    参数:pattern 正则表达式

       string 目标字符串

       flags 功能标志位,扩展正则表达式的匹配

    返回值:匹配到的内容列表,如果正则表达式有子组,则只能获取到子组对应的内容

    s = "Alex:1994,Sunny:1993"
    pattern = r"(w+):(d+)"
    
    # re模块调用findall
    l = re.findall(pattern, s)
    print(l)
    #[('Alex', '1994'), ('Sunny', '1993')]

    二、regex.findall(string,pos,endpos)

    功能:根据正则表达式陪陪目标字符串内容

    参数:string 目标字符串

       pos 截取目标字符串的开始匹配位置

       endpos 截取目标字符串的结束匹配位置

    返回值:匹配到的内容列表,如果正则表达式有子组,则只能获取到子组对应的内容

    import re
    
    s = 'Alxe:1994,Sunny:1993'
    pattern = r'w+'
    
    #使用compiel对象调用
    regex=re.compile(pattern)
    l=regex.findall(s,2,8)
    print(l)
    #['ex', '199']

    三、re.split(pattern,string,flags=0)

    功能:使用正则表达式匹配内容,切割目标字符串

    参数:pattern 正则表达式

       string 目标字符串

       flags 功能标志位,扩展正则表达式的匹配

    返回值:切割后的内容列表

    import re
    
    s = 'Alxe:1994,Sunny:1993'
    
    l=re.split(r':|,',s)
    l1=re.split(r'[,:]',s)按列表切割可以切割两个以上
    print(l)
    print(l1)
    #['Alxe', '1994', 'Sunny', '1993']
    #['Alxe', '1994', 'Sunny', '1993']

    四、re.sub(pattern,replace,string,max,flags=0)

    功能:使用一个字符串替换正则表达式匹配到的内容

    参数:pattern 正则表达式

       replace 替换的字符串

       string 目标字符串

       max 最多替换几处,默认替换全部

       flags 功能标志位,扩展正则表达式的匹配

    返回值:替换后的字符串

    import re
    
    s=re.sub(r's+','#','This is a test',2)
    print(s)
    This#is#a test

    五、re.subn(pattern,replace,string,max,flags=0)

    功能:使用一个字符串替换正则表达式匹配到的内容

    参数:pattern 正则表达式

       replace 替换的字符串

       string 目标字符串

       max 最多替换几处,默认替换全部

       flags 功能标志位,扩展正则表达式的匹配

    返回值:替换后的字符串和替换了几处

    #替换匹配的内容
    s=re.subn(r's+','#','This is a test',2)
    print(s)
    #('This#is#a test', 2)

    六、re.finditer(pattern,string,flags=0)

    功能:根据正则表达式匹配目标字符串内容

    参数:pattern 正则表达式

       string 目标字符串

       flags 功能标志位 扩展正则表达式的匹配

    返回值:匹配结果的迭代器

    import re
    
    s='2019年,建国70年'
    pattern=r'd+'
    it=re.finditer(pattern,s)
    # print(dir(it.__next__()))
    for i in it:
      print(i.group())#获取match对象对应内容
    
    #2019
    #70

    七、re.fullmatch(pattern,string,flags=0)

    功能:完全匹配某个目标字符串

    参数:pattern 正则

       string 目标字符串

    返回值:匹配内容match object

    #完全匹配
    m=re.fullmatch(r'w+','Jame1')
    print(m.group())
    #Jame1

    八、re.match(pattern,string,flags=0)

    功能:匹配某个目标字符串开始位置

    参数:pattern 正则

       string 目标字符串

    返回值:匹配内容match object

    #匹配开始位置
    m=re.match(r'[A-Z]w*','Hello world')
    print(m.group()) #Hello

    九、re.seatch(pattern,string,flags=0)

    功能:匹配目标字符串第一个符合内容

    参数:pattern 正则

       string 目标字符串

    返回值:匹配内容match object

    #匹配第一处
    m=re.search(r"[A-Z]w*",'  Hello  world')
    print(m.group())
    Hello

    compile对象属性

    • flags : flags值
    • pattern : 正则表达式
    • groups : 子组数量
    • groupindex : 捕获组名与组序号的字典

    match对象的属性方法

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

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

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

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

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

    • group(n = 0)

      功能:获取match对象匹配内容

      参数:默认为0表示获取整个match对象内容,如果是序列号或者组名则表示获取对应子组内容

      返回值:匹配字符串

    flags参数扩展

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

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

      3.常用flag

      • A == ASCII 元字符只能匹配ascii码
      • I == IGNORECASE 匹配忽略字母大小写
      • S == DOTALL 使 . 可以匹配换行
      • M == MULTILINE 使 ^ $可以匹配每一行的开头结尾位置
      • X == VERBOSE 为正则添加注释

      4.使用多个flag

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

    s = """Hello
    北京
    """
    # 自能匹配ASCII
    regex = re.compile(r'w+', flags=re.A)
    l = regex.findall(s)  # ['Hello']
    print(l)
    # 不区分大小写
    regex1 = re.compile(r'[A-Z]+', flags=re.I)
    l = regex1.findall(s)
    print(l)  # ['Hello']
    # 让.匹配换行
    regex2 = re.compile(r'.+', flags=re.S)
    l = regex2.findall(s)
    print(l)  # ['Hello
    北京
    ']
    # ^$ 匹配每行开头结尾
    regex3 = re.compile(r'Hello$', flags=re.M)
    l = regex3.findall(s)
    print(l)  # ['Hello']
    pattern = """
    w+  #hello
    s+  #匹配换行
    w+  #北京
    """
    regex4 = re.compile(pattern, flags=re.X)
    l = regex4.findall(s)
    print(l)  # ['Hello
    北京']
  • 相关阅读:
    n皇后问题
    hdu 4911 Inversion and poj2299 [树状数组+离散化]
    离散化
    汉诺塔
    hdu 4027 Can you answer these queries?[线段树]
    开根号
    hdu 1069 Monkey and Banana 【动态规划】
    Linux系统下安装rz/sz命令及使用说明
    PHP获得指定日期所在月的第一天和最后一天
    PHP获得指定日期所在星期的第一天和最后一天
  • 原文地址:https://www.cnblogs.com/maplethefox/p/11020528.html
Copyright © 2020-2023  润新知