• python 正则表达式之零宽断言


    零宽断言:用于查找特定内容之前或之后的内容,但并不包括特定内容本身
    对于零宽断言来说,我认为最重要的一个概念是位置,零宽断言用于指定一个位置,这个位置应该满足一定的条件(它附近满足什么表达式),并且这个位置不是字符(因此匹配返回无结果),仅仅是一个位置,因此它们也被称为零宽断言
    零宽断言重点的这一个位置,是通过一个条件:这个位置附近(前或者后)存在或者不存在一个A(A可以是一个表达式)来决定的

    请忘记它的各种名字,我们只记忆公式本身:

    (?=exp) :此位置后面匹配表达式exp
    (?<=exp):此位置前面匹配表达式exp
    (?!exp):此位置后面不匹配表达式exp
    (?<!exp):此位置前面不匹配表达式exp
    :有些地方只支持部分零宽断言,比如在线正则表达式

    下面是示例:
    >>> import re
    >>> str = '<div>hello world</div>'
    >>> re.search('(?=he).*',str)
    <_sre.SRE_Match object; span=(5, 22), match='hello world</div>'>
    >>> re.search('(?=he).*(?<=ld)',str)
    <_sre.SRE_Match object; span=(5, 16), match='hello world'>
    >>> re.search('(?<=<div>).*(?=</div>)',str)
    <_sre.SRE_Match object; span=(5, 16), match='hello world'>

    >>> str = '3446456sdff456a'
    >>> re.search('[a-z]{3}(?!/d)',str)
    <_sre.SRE_Match object; span=(7, 10), match='sdf'>
    >>> re.search('[a-z]{3}(?![a-z])',str)
    <_sre.SRE_Match object; span=(8, 11), match='dff'>

    >>> re.search('(?<![0-9])[0-9]{3}',str)
    <_sre.SRE_Match object; span=(0, 3), match='344'>   #匹配到了第一个位置
    >>> re.search('(?<![0-9])[0-9]{3}(?![0-9])',str)
    <_sre.SRE_Match object; span=(11, 14), match='456'>

  • 相关阅读:
    LeetCode 热题100 11. 盛最多水的容器
    LeetCode 热题100 21. 合并两个有序链表
    LeetCode 热题100 17. 电话号码的字母组合
    LeetCode 热题100 19. 删除链表的倒数第N个节点
    cmake 指定Cpu架构
    [学习笔记]普通平衡树(Splay)
    [原创] RestartPC64中文版v1.0.0.9
    Vue 04 谷歌浏览器配置vue开发者工具
    Vue02 Node下载安装
    springboot框架返回日期值少一天
  • 原文地址:https://www.cnblogs.com/nat-zhu/p/8040397.html
Copyright © 2020-2023  润新知