Python正则表达式中的 零宽断言  …

原创 2016年08月29日 12:49:59
首先说明一下什么是零宽断言,所谓零宽断言就是并不去真正的匹配字符串文本,而仅仅是匹配对应的位置。正则表达式中有很多这样的断言,常见的如匹配字符串或者行的起始位置 ^ 和 /A,匹配字符串或者行的末尾 $ 和 /Z,单词边界/B等等。
这些简单的就不说了,正则表达式中只有当断言为真时才会继续进行匹配。
  
      (?:...)   非捕获组     只是无捕获组匹配exp,但不捕获匹配的文本,也不给这个组分配组号。

      (?=exp) 肯定式向前查找                  它断言自身出现的位置的后面能匹配表达式exp

      (?!exp否定式向前查找                  它断言自身出现的位置的后面不匹配表达式exp


      (?<=exp肯定式向后查找                它断言自身出现的位置的前面能匹配表达式exp

      (?exp否定式向后查找                它断言自身出现的位置的前面不匹配表达式exp



import re

pattern =  re.compile('^(?!00).*find$')

string1 =  '00 00 find'

string2 =  '11 00 find'

s1 = pattern.search(string1)

if s1:

    print s1.group()

s2 = pattern.search(string2)

if s2:

 

    print s2.group()

返回

>>> 

 

11 00 find


^(?!00) 就是说^这个表示开头,开头后面不跟有00。


注意

  •  group() 同group(0)就是匹配正则表达式整体结果
  •  group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。

这里如果用 print s2.group(1)  就会出错,所以说 (?!exp) 这个括号并不表示捕获。也不分配组号。


import re
pattern =  re.compile('^((?!00).)*$')        ##只要字符串中出现00  就不匹配

string1 =  '00 00  find'
string2 =  '11 00  find'


s1 = pattern.search(string1)
if s1:
    print '1:' + s1.group()

s2 = pattern.search(string2)
if s2:
    print '2:' + s2.group()

这样就一个也不匹配。
表达式(?!00).会往前查找,看看前面是不是没有“00”字串,如果没有(是其它字符),那么.(点号)就会匹配这些其它字符。但这样只会匹配一次。

((?!00).)* 这样就能匹配0次或多次了。
注意 
^((?!00).)*$   以^  开头, $结尾,表示在整个字符串中搜寻。


import re
pattern =  re.compile('^((?!00).)*find$')

string1 =  '00 00  find'
string2 =  '11 00  find'
string3 =  '11 11  find'
string4 =  '11 11  find?'


s1 = pattern.search(string1)
if s1:
    print '1:' + s1.group()

s2 = pattern.search(string2)
if s2:
    print '2:' + s2.group()

s3 = pattern.search(string3)
if s3:
    print '3:' + s3.group()

s4 = pattern.search(string4)
if s4:
    print '4:' + s4.group()

>>> 
3:11 11  find

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

JSP&nbsp;EL表达式详细介绍

原文来处 一、JSP EL语言定义 E L(Expression Language)目的:为了使JSP写起来更加简单。 表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提...

HTML中&nbsp; &ensp; &emsp; &thinsp;等6种空白空格的区别

HTML中&nbsp; &ensp; &emsp; &thinsp;等6种空白空格的区别 HTML提供了5种空格实体(space entity),它们拥有不同的宽度,非断行空格(&nbsp;...

iOS 2.3.7 Your app name to be displayed on the&nbsp

复制原文只为自己查找方便(  原文 ) 苹果审核条款 惊!苹果再次加强审核力度,众App纷纷止步应用标题 近日,在和开发者交流的过程中,我们得到了以下反馈:App ...

android端ios端&nbsp;视频、文件高效加密

近期做项目遇到加密问题,通过在网上查阅大量资料,看见不少人提出通过给文件头部和尾部添加数据等方法,自己测试了一下,一个50m的文件通过这种方法,加解密时需要5s以上(用到了复制文件操作),这肯定不适合...

AM335X&nbsp uboot烧写

原创:http://blog.sina.com.cn/u/2312748742 NAND地址如下:  +------------+-->0x00000000-> SPL start ...

html空件不可见&nbsp;文字滚动

id="playerinfo" style="display:none">1     html空件不可见         [HTML代码]会移动的文字(Marq...

关于&nbsp;空格实体在最新的IE、Firefox和Google Chrome浏览器中解析宽度不一致问题的解决

如文章标题,网络上大多数人说是页面编码和字体设置的问题,可是我照着做了,发现在  Google Chrome浏览器中&nbsp;解析成的空格宽度仍然比IE和Firefox上的宽,IE和Fire...
  • twtja
  • twtja
  • 2015-07-08 15:52
  • 1847

wind7&nbsp;安装IIS教程

一、进入Windows7的控制面板,选择左侧的打开或关闭Windows功能。 二、现在出现了安装Windows功能的选项菜单,注意选择的项目,我们需要手动选择需要的功能,下面这张图片把需要安...

org.springframework.beans.factory.BeanCreationException: Error creating bean&nbsp

异常: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'admin...

&nbsp|&quot|&amp|&lt|&gt等html字符转义

提示:请直接按CTRL+F搜索您要查找的转义字符。 常用表: No. 文字表記 10進表記 16進表記 文字   ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)