美文网首页
python正则表达式和re模块

python正则表达式和re模块

作者: Dxes | 来源:发表于2019-11-28 18:53 被阅读0次
    1.转义符号

    有特殊意义或者特殊功能的符号前加\让它特殊的功能和意义消失

    re_str = r'\d\d\.\d\d'
    print(re.fullmatch(re_str, '23.34'))        
    
    re_str = r'\\wabc'
    print(re.fullmatch(re_str, '\wabc'))
    # <_sre.SRE_Match object; span=(0, 5), match='\\wabc'>
    

    注意:独立的有特殊意义的符号,在[]中它的特殊意义会自动消失

    re_str = r'[+*]abc'
    print(re.fullmatch(re_str, '*abc'))
    
    re_str = r'\d\d[.]\d\d'
    print(re.fullmatch(re_str, '23.89'))
    
    re_str = r'[-p+\]]abc'
    print(re.fullmatch(re_str, '-abc'))
    
    print(re.fullmatch(r'[\\mabc]', '\\'))
    
    

    ========================re模块=========================

    2.re模块

    1)compile(正则表达式) - 编译创建正则表达式对象

    re_obj = re.compile(r'\d{3}')
    re_obj.fullmatch('234')
    
    re.fullmatch(r'\d{3}', '345')
    

    2)funllmatch(正则表达式,字符串) - 让正则表达式和整个字符串进行匹配;如果匹配成功返回匹配对象,匹配失败返回None

    result = re.fullmatch(r'(\d{3})([a-z]{4})', '234hksj')
    print(result)
    
    匹配对象
    """
    a.获取匹配结果: 
    匹配对象.group()   - 获取整个正则表达式匹配到的结果
    匹配对象.group(N)  - 获取第N分组匹配到的结果
    
    b.获取匹配结果在原字符串中的范围
    匹配对象.span()
    
    c.获取原字符串
    匹配对象.string
    """
    print(result.group())   # 234hksj
    print(result.group(1))  # 234
    print(result.group(2))  # hksj
    
    print(result.span())   # (0, 7)
    print(result.span(2))  # (3, 7)
    
    print(result.string)   # 234hksj
    

    3)match(正则表达式,字符串) - 让字符串开头和正则表达式进行匹配;返回值是匹配对象或者None

    print(re.match(r'\d{3}', '789佳的说法0023-==='))
    print(re.match(r'\d{3}abc', '345ABC就开始大锅饭', flags=re.I))
    

    4)search(正则表达式,字符串) -在字符串中查找第一个满足正则表达式的子串;返回值是匹配对象或者None

    print(re.search(r'\d{3}', '时代峰峻34890shh==23992课时费'))
    

    5)findall(正则表达式,字符串) - 获取字符串中所有满足正则表达式的子串;返回值是列表,列表中的元素是字符串

    print(re.findall(r'\d+', '安抚348净宽度34920skdsf45烧开后09823hsd3sd89'))
    # ['348', '34920', '45', '09823', '3', '89']
    print(re.findall(r'\d+[a-z]{2}', '安抚348净宽度34920skdsf45烧开后09823hsd3sd89'))
    # ['34920sk', '09823hs', '3sd']
    
    print(re.findall(r'(\d+)[a-z]{2}', '安抚348净宽度34920skdsf45烧开后09823hsd3sd89'))
    # ['34920', '09823', '3']
    
    print(re.findall(r'(\d+)([a-z]{2})', '安抚348净宽度34920skdsf45烧开后09823hsd3sd89'))
    # [('34920', 'sk'), ('09823', 'hs'), ('3', 'sd')]
    
    1. finditer(正则表达式,字符串) - 获取字符串中所有满足正则表达式的子串; 返回值是迭代器,迭代器中的元素是匹配对象
    result = re.finditer(r'(\d+)([a-z]{2})', '安抚348净宽度34920skdsf45烧开后09823hsd3sd89')
    print(list(result))
    

    7)split(正则表达式,字符串) - 以正则表达式匹配到的子串作为切割点,对字符串进行切割; 返回值是列表,列表中的元素是字符串

    result = re.split(r'\d+', '暗红色的83大黄金黄色的9罚款0233s闪电发货890')
    print(result)   # ['暗红色的', '大黄金黄色的', '罚款', 's闪电发货', '']
    

    8)sub(正则表达式,字符串1,字符串2) - 将字符串2中满足正则表达式的子串全部替换成字符串1;返回值是替换后的字符串

    result = re.sub(r'\d+', 'and', '暗红色的83大黄金黄色的9罚款0233s闪电发货890')
    print(result)
    

    9)参数flags

    以上所有的函数都有一个参数flags, 可以加re.I表示匹配的时候忽略大小写;加re.S表示单行匹配(默认是多行匹配re.M)
    多行和单行的主要区别: 多行匹配.不能和\n进行匹配;单行.可以和\n进行匹配
    """
    print(re.fullmatch(r'a.b', 'a\nb'))   # None
    print(re.fullmatch(r'a.b', 'a\nb', flags=re.S))
    
    print(re.search(r'a.+b', '世纪东方anmb\n是否b大括号'))
    print(re.search(r'a.+b', '世纪东方anmb\n是否b大括号', re.S))
    

    相关文章

      网友评论

          本文标题:python正则表达式和re模块

          本文链接:https://www.haomeiwen.com/subject/xoobwctx.html