美文网首页
re.S与re.M

re.S与re.M

作者: ThomasYoungK | 来源:发表于2018-11-25 21:52 被阅读86次

    首先可以看这个mail:https://mail.python.org/pipermail/python-list/2014-July/674576.html

    本来呢: ^只匹配字符串的开头,$只匹配字符串结尾,.不匹配换行符.
    re.S做的事情是: 让.也匹配换行符
    re.M做的事情是: 让^匹配每行的开头,$匹配每行的结尾
    举个例子

    import re
    
    text = """First line.
    Second line.
    Third line."""
    
    pattern = "^(.*?)$"  # Match anything from the start to end. 非贪婪匹配
    
    # 让^、$只匹配字符串的开头、结尾, .不匹配换行符
    ret1 = re.search(pattern, text)  
    print(ret1)
    
    # 让.匹配换行符
    ret2 = re.search(pattern, text, re.S)  
    print(ret2)
    
    # 让^、$匹配每行的开头、结尾, 同时让.匹配换行符, 且pattern是非贪婪匹配
    ret3 = re.search(pattern, text, re.M | re.S)  
    print(ret3)
    
    # 让^、$匹配每行的开头、结尾, 同时让.匹配换行符, 且pattern是贪婪匹配
    ret4 = re.search("^(.*)$", text, re.M | re.S)  
    print(ret4)
    
    # 让^、$匹配每行的开头、结尾, 非贪婪
    ret5 = re.findall(pattern, text, re.M)  
    print(ret5)
    

    输出结果为

    None
    <_sre.SRE_Match object; span=(0, 36), match='First line.\nSecond line.\nThird line.'>
    <_sre.SRE_Match object; span=(0, 11), match='First line.'>
    <_sre.SRE_Match object; span=(0, 36), match='First line.\nSecond line.\nThird line.'>
    ['First line.', 'Second line.', 'Third line.']
    

    相关文章

      网友评论

          本文标题:re.S与re.M

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