zoukankan      html  css  js  c++  java
  • 正则表达式编译和DOTALL小结

    常见方法

    !/usr/bin/python3
    # -*- coding: utf-8 -*-
    
    import re
    
    string = '123abc123'
    pattern = re.compile('d+')
    
    # result = pattern.match(string)    # match  开头匹配, 只匹配一次
    # result = pattern.search(string)    # search 全局匹配, 只匹配一次
    # result = pattern.findall(string)    # findall 返回是列表,列表中是所有的匹配结果
    
    result = pattern.finditer(string)    # finditer 返回是迭代对象,内部存放了匹配对象
    for data in result:
        print(data)
    
    # print(result)
    
    • findall 把所有的结果匹配完成了才返回,数量小可以使用,但是数据量大不推荐使用
    • finditer 每匹配一个就返回一个,节省内存,适合数据量大的时候使用

    re.compile()

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    import re
    
    string = '123abc'
    
    string_list = ["123abc","123abc123"]
    
    
    # print(re.findall('d+',string))
    
    
    # pattern = re.compile('d+')  #1. 编译生成匹配规则
    # print(pattern.findall(string))  # 2. 匹配数据
    
    
    pattern = re.compile('d+')
    for string in string_list:
        print(pattern.findall(string))
    
    • re.findall ==> 1. 编译生成匹配规则 2. 匹配数据
      会创建上下文环境,吃性能和内存
    • re.compile()创建匹配规则,可以重复利用

    DOTALL模式

    • re.DOTALL == re.S == re.RegexFlag.DOTALL == re.RegexFlag.S
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    
    import re
    string = '''
        abcd
        abcd
    '''
    pattern = re.compile('a(.*?)d')    # 非贪婪 ['bc', 'bc']
    pattern = re.compile('a(.*)d')    # 贪婪 ['bc', 'bc']
    
    pattern = re.compile('a(.*)d',re.RegexFlag.S)    # DOTALL模式 ['bcd
        abc']
    
    print(pattern.findall(string))
    
    
    • (.*) 贪婪模式 -> 尽可能多的匹配
    • (.*?) 非贪婪模式 -> 一旦匹配
    • . 匹配的除' '以外所有字符,设置 DOTALL模式,让 . 匹配包括 ' ' 所有字符

    忽略大小写

    • re.IGNORECASE == re.I == re.RegexFlag.IGNORECASE == re.RegexFlag.I
    # 多模式共同支持使用 |
    pattern = re.compile('a(.*)d',re.DOTALL | re.IGNORECASE)
    

    原始字符串

    string = r"ab
    cd"
    
    print(string)    # "ab
    cd"
    

    回退符

    string = "abcdef"
    print(string)    # "abef"
    
  • 相关阅读:
    斐波那契数列 的两种实现方式(Java)
    单链表反转
    单链表合并
    两个有序list合并
    list去重 转载
    RemoveAll 要重写equals方法
    Java for LeetCode 138 Copy List with Random Pointer
    Java for LeetCode 137 Single Number II
    Java for LeetCode 136 Single Number
    Java for LeetCode 135 Candy
  • 原文地址:https://www.cnblogs.com/oklizz/p/12238505.html
Copyright © 2011-2022 走看看