zoukankan      html  css  js  c++  java
  • Python正则表达式

    正则表达式基本符号使用

    >>> import re
    >>> re.findall(r'a.','abc')
    ['ab']
    
    >>> re.findall(r'^ab','abc')
    ['ab']
    
    >>> re.findall(r'bc$','abc')
    ['bc']
    
    >>> re.findall(r'abc*','abcccc')
    ['abcccc']
    
    >>> re.findall(r'abc+','ab')
    []
    >>> re.findall(r'abc+','abccc')
    ['abccc']
    
    >>> re.findall(r'abc{2}','abcc')
    ['abcc']
    
    >>> re.findall(r'abc{2,4}','abccc')
    ['abccc']
    
    >>> re.findall(r'abc{1,3}?','abccc')
    ['abc']
    
    >>> re.findall(r'abc?','abcdef')
    ['abc']
    
    >>> re.findall(r'abc?','abc')
    ['abc']
    
    >>> re.findall(r'abc*?','abcc')
    ['ab']
    
    >>> re.findall(r'abc+?','abcc')
    ['abc']
    
    >>> re.findall(r'abc??','abcc')
    ['ab']
    
    >>> re.findall(r'1.2','1.2')
    ['1.2']
    
    >>> re.findall(r'a[ab]c','abcd')
    ['abc']
    
    >>> re.findall(r'abc|def','abcdef')
    ['abc', 'def']
    
    >>> re.findall(r'a(bc)','abcdef')
    ['bc']
    
    >>> re.findall(r'pythonre(?#注释)','pythonretest')
    ['pythonre']
    
    #只和它之前的字符串组合
    >>> re.findall(r'abc(?=def)','abcdef')
    ['abc']
    
    #只和它之后的字符串组合
    >>> re.findall(r'(?<=abc)def','abcdef')
    ['def']
    
    # abc后面跟的不是def,返回前面的字符串
    >>> re.findall(r'abc(?!def)','abcgdef')
    ['abc']
    >>> re.findall(r'(?!def)ab','defgab')
    ['ab']
    
    >>> re.findall(r'(?:a)(b)','ab')
    ['b']
    

    特殊转义字母

    特殊表达式序列 说明
    A 只在字符串开头进行匹配。
     匹配位于开头或者结尾的空字符串
    B 匹配不位于开头或者结尾的空字符串
    d 匹配任意十进制数,相当于 [0-9]
    D 匹配任意非数字字符,相当于[^0-9]
    s 匹配任意空白字符,相当于 [ fv]
    S 匹配任意非空白字符,相当于 [^ fv]
    w 匹配任意数字和字母,相当于 [a-zA-Z0-9_]
    W 匹配任意非数字和字母的字符,相当于 [^a-zA-Z0-9_]
     只在字符串结尾进行匹配

    贪婪与非贪婪

    贪婪符号* + ?这些符号会在符号的功能基础上会尽可能的匹配到最长的字符串。

    非贪婪.? *? +? {n,m}?等与贪婪符号相反会尽可能的匹配最短长度的字符串。

    findall方法

    获取所有匹配的字符串,以list返回

    re.findall(pattern, string, [flags])

    修饰符(flags) 描述
    re.I 使匹配对大小写不敏感
    re.L 做本地化识别(locale-aware)匹配
    re.M 多行匹配,影响 ^ 和 $
    re.S 使 . 匹配包括换行在内的所有字符
    re.U 根据Unicode字符集解析字符。这个标志影响 w, W, , B.
    re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
    >>> re.findall(r'ab','abcabcabc')
    ['ab', 'ab', 'ab']
    
    # 当匹配到第一个'aba'时,指针在'b'的位置,所以不会匹配到中间的'aba'
    >>> re.findall(r'aba','abababa')
    ['aba', 'aba']
    
    >>> re.findall(r'ab.*?d','''ab
    ... cdef''')
    []
    # 使用修饰符的作用,使得'.'可以匹配换行的字符。
    >>> re.findall(r'ab.*?d','''ab
    ... cdef''',re.S)
    ['ab
    cd']
    

    finditer方法

    返回一个顺序访问每一个匹配结果(Match对象)的迭代器

    finditer(pattern, string[, flags])

    >>> result = re.finditer(r'ab.','abcabd')
    >>> for e in result:
    ...     print(e.group())
    ...
    abc
    abd
    

    re.match和re.search

    只获取匹配的第一个字符串

    import re
    
    # 从字符的第一个字母开始对比,如何发现与规则不符合返回None。
    result1 = re.match(r'abc','defabc')
    print(result1)
    result2 = re.match(r'abc','abcdef')
    # 获取正则式中的第一组的数据,组号需要一一对应,默认第0组。
    print(result2.group())
    # 开始匹配的位置
    print(result2.start())
    # 结束匹配的位置
    print(result2.end())
    # (开始位置,结束位置)
    print(result2.span())
    
    None
    abc
    0
    3
    (0, 3)
    
    # 从字符串中获取第一个匹配的字符串,之后停止匹配。
    result3 = re.search(r'abc','defabc')
    # 获取正则式中的第一组的数据,组号需要一一对应,默认第0组。
    print(result3.group(0))
    
    abc
    

    sub和subn方法

    替换匹配的字符串

    # 替换匹配的字符串
    >>> re.sub(r'd+','num','12 ok 34 ok 56 ok')
    'num ok num ok num ok'
    
    # 替换匹配的字符串并返回替换的次数。
    >>> re.subn(r'd+','num','12 ok 34 ok 56 ok')
    ('num ok num ok num ok', 3)
    

    split方法

    分割字符串

    split(pattern, string, maxsplit=0)

    # 默认分割全部
    >>> re.split(r'd+','32dsfa234sdfa565sdafhs3452')
    ['', 'dsfa', 'sdfa', 'sdafhs', '']
    
    # 只分割2次
    >>> re.split(r'd+','32dsfa234sdfa565sdafhs3452',2)
    ['', 'dsfa', 'sdfa565sdafhs3452']
    
    # 匹配多行和忽略大小写来匹配分割
    >>> re.split(r'[a-z]+','1ABc2cdE3FhH4',re.M,re.I)
    ['1', '2', '3', '4']
    

    参考:https://www.cnblogs.com/yyyg/p/5498803.html

  • 相关阅读:
    让PHP开发者事半功倍的十大技巧
    Sublime Text 3 快捷键总结
    localhost访问错误Forbidden You don't have permission to access / on this server.解决办法(亲测)
    html在一个页面显示另一个页面的部分内容
    db2许可证安装
    spring3中使用注解方式实现定时器调度任务
    c3p0详细设置
    hibernate.cfg.xml详细配置
    ExtJS学习(面板)
    汉诺塔算法
  • 原文地址:https://www.cnblogs.com/studyNotesSL/p/11417182.html
Copyright © 2011-2022 走看看