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

nginx&nbsp;正则表达式匹配入门篇

1、nginx配置基础 1、正则表达式匹配 ~ 区分大小写匹配 ~* 不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 ^ 以什么开头的匹配 $ 以什么结尾的匹配 ...

正则表达式&nbsp;笔记

正则表达式 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要,正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。 *和?是所谓的通配符。 ...

正则表达式&nbsp;集锦

注意:/ 约束条件/,//之间的是约束条件,^是开始字符,$是结束字符,不起作用的情况下可以前面加^,并以+$是结束字符   1、.句点符号表示任意一个字符;   2、[ ] 方括号表示匹配可以匹配方...
  • leovnay
  • leovnay
  • 2014年01月13日 22:08
  • 347

正则表达式【Pattern&nbsp;】

public final class Pattern extends Object implements Serializable 正则表达式的编译表示形式。 指定为字符串的正则表达式必须首先被...

PHP&nbsp;正则表达式语法

正则表达式简介 在某些应用中,往往有时候需要根据一定的规则来匹配(查找)确认一些字符串,如要求用户输入的 QQ 号码为数字且至少 5 位。用于描述这些规则的工具就是正则表达式。 最简单的匹配 最...

正则表达式&nbsp;LINUX

正则表达式 热身 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。 例如 g...

UltraEdit&nbsp;正则表达式手册

原文地址:正则表达式手册">UltraEdit 正则表达式手册作者:Oo星恒 UltraEdit 允许在搜索菜单下面列出了的许多搜索和替换功能中使用正则表达式。正则表达式能让更多的复杂的搜索和替换功能...

editplus&nbsp;正则表达式

\t Tab character.tab符号 \n New line.新的一行(换行符) . Matches any character.任何字符 | Either expression on its...
  • gkyh899
  • gkyh899
  • 2013年10月23日 23:42
  • 299

Python&nbsp;-&nbsp;正则表达式指南

从这里学习而得:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Py...

JSP&nbsp;EL表达式详细引见与JSTL&amp;…

JSP EL表达式详细介绍与JSTL 标签库详解 JSP EL表达式详细介绍 一、JSP EL语言定义 E L(Expression Language) 目的:为了使JSP写起来更加简单。 表达式语...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python正则表达式中的&nbsp;零宽断言&nbsp;&nbsp;…
举报原因:
原因补充:

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