美文网首页
re模块 —— 环视

re模块 —— 环视

作者: 流年扶苏 | 来源:发表于2018-05-16 14:32 被阅读0次

正则表达式引擎

分类:

  1. DFA: Deterministic Finite Automaton,确定型有穷自动机
  2. NFA: Non-deterministic Finite Automaton,非确定型有穷自动机
    1. Traditional NFA:常用的引擎,如Java,less,more,sed,python,...
    2. POSIX NFA

NFA的特性:捕获和引用、环视、优先匹配/忽略的量词

字符串由字符位置组成,位置数总比字符数多一个

占有字符、零宽度

我们说子表达式是占有字符的,当:
1. 子表达式匹配的是字符(而非位置)并且匹配结果被保存

我们说子表达式是零宽度的,当:
1. 子表达式匹配的仅仅是位置(而不是字符
2. 子表达式虽然匹配的是字符但是没有保存匹配结果时

占有字符的子表达式间互斥,零宽度的子表达式间非互斥


顺序肯定环视 —— 实际匹配结果重叠时进行查找

语法:(?=Expression)
示例:
假设现在有一个字符串'11!22@33#'
我们想匹配的模式是'\d.',即查找所有数字跟上任意字符的子串
期望结果是['11','1!','22','2@','33','3#']
然俄,re.findall('\d.', '11!22@33#')的返回结果却是['11','22','33']
这还得从控制权的转交和正则的传动讲起
由于环视是匹配位置不占有字符,可以这样:re.findall('(?=\d.)', '11!22@33#')
解释一哈:
表示我们从第一个位置(索引为0)开始进行搜索,顺序肯定环视要求该位置右边必须要满足一定的规则(这里是'\d.'该位置才是有效匹配的位置。由于环视子表达式是零宽度的,不论这个规则多长,下一次匹配的位置都是当前位置加一,从而实现对每个位置进行检查。
这里注意一个细节,环视表达式检查的是位置,所以就算匹配成功返回的也是位置(不是字符),所以上面的语句实际结果是['','','','','',''],要捕获字符串需要使用捕获组对规则进行捕获,就像这样:re.findall('(?=(\d.))', '11!22@33#')

相关文章

  • re模块 —— 环视

    正则表达式引擎 分类: DFA: Deterministic Finite Automaton,确定型有穷自动机 ...

  • 21.Python之re模块

    Python之re模块 re模块介绍re 模块使 Python 语言拥有全部的正则表达式功能。 re模块的内置方法...

  • python(学会正则走天下)

    python通过re模块来实现。本篇文章着重对Python的RE进行介绍re 模块首先通过 re.compiler...

  • Python 脚本之统计基因组文件中染色体长度及N碱基数目

    模块介绍 re模块 re模块是Python中的正则表达式调用模块,在python中,通过将正则表达式内嵌集成re模...

  • 遇见正则表达式(2)

    昨天我已经埋好了伏笔,今天来重点学习re模块。 学习re模块,主要是学习该模块的几个重要的方法。 re.finda...

  • 小猪的Python学习之旅 —— 3.正则表达式

    re模块 Python中通过re模块使用正则表达式,该模块提供的几个常用方法: 1.匹配 re.match(pat...

  • python05-正则表达式(二)

    正则表达式(二) re模块(regex) python中没有正则表达式的函数,需要引入内置的re模块 re模块方法...

  • re模块

    匹配标签 匹配整数 数字匹配 爬虫练习

  • re模块

    参考资料https://www.ibm.com/developerworks/cn/opensource/os-c...

  • re 模块

    1、Python中的模块有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt函数,必须用语句#include...

网友评论

      本文标题:re模块 —— 环视

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