(一)零宽断言

说明:本文的例子使用python描述
      首先说明一下什么是零宽断言,所谓零宽断言就是并不去真正的匹配字符串文本,而仅仅是匹配对应的位置。
      正则表达式中有很多这样的断言,常见的如匹配字符串或者行的起始位置 ^ 和 /A,匹配字符串或者行的末尾 $ 和 /Z,单词边界/B等等。这些简单的就不说了,今天主要说一下界定的使用方法(有些资料叫环式结构,名字而已,不重要)。界定也是一种零宽断言,界定主要有四类:
      1、前向界定(肯定顺序环视)(?=exp)
      表示右边要匹配exp表达式

strTest = "aaa111aaa , bbb222&, 333ccc"  

strRe = r"\d+(?=[a-z]+)"
reObj = re.compile(strRe) print reObj.findall(strTest)

输出:(正则的意思是找出连续的数字并且最后一个数字跟着至少一个a-z里面的字符序列)

['', '']

      2、前向否定界定(否定顺序环视)(?!exp)
      表示右边不匹配exp表达式

strTest = "aaa111aaa , bbb222&, 333ccc"  

strRe = r"\d+(?![a-z]+)"
reObj = re.compile(strRe) print reObj.findall(strTest)

输出:(正则的意思是找出连续的数字,并且最后一个数字后面不能跟任何一个a-z里面的字符序列)

['', '', ''] 

   3、反向界定(肯定逆序环视)(?<=exp)文本必须定长
      表示左边要匹配exp表达式

strTest = "aaa111aaa , bbb222&, 333ccc"

strRe = r"(?<=[a-z])\d+"
reObj = re.compile(strRe) print reObj.findall(strTest)

输出:(正则的意思是找出连续的数字,并且第一个数字的前面要是a-z中的一个字符)

['', '']

      4、反向否定界定(否定逆序环视)(?文本必须定长
      表示左边不要匹配exp表达式

strTest = "aaa111aaa , bbb222&, 333ccc"  

strRe = r"(?<![a-z])\d+"
reObj = re.compile(strRe) print reObj.findall(strTest)

输出:(正则的意思是找出连续的数字,并且第一个数字的前面不能是a-z中的一个字符)

['', '', '']  

这里要注意的一个问题是:在python和Perl中两个反向界定的表达式exp只允许使用定长文本,譬如最后第四个例子,如果正则表达式写成:strRe = r"(?,py解释器会报错:error: look-behind requires fixed-width pattern。

(二)命名组和无捕获组

python里面还有一种命名组和无捕获组
命名组比较牛×,也是python的扩展,能把捕获组向使用字典一样的使用:

s = 'Tom:9527 , Sharry:0003'
m = re.match( r'(?P\w+):(?P\d+)' , s) print m.group()
print m.group(0)
print m.group(1)
print m.group(2)
print m.groups()
print m.group("name")
print m.group("num")

  输出

Tom:9527
Tom:9527
Tom
9527
('Tom', '')
Tom
9527

  无捕获组的使用也是类似,语法:(?:exp)只是无捕获组匹配exp,但不捕获匹配的文本,也不给这个组分配组号

Python-正则零宽断言及命名捕获(类PHP)的更多相关文章

  1. Regex 正则零宽断言

    http://baike.baidu.com/link?url=sLfovpZmIcS5Uz_tiidXoVtjl30Tu3wARMfhnEcbgEGzsb8g1z7dvtGNXTulu1KDodmi ...

  2. $python正则表达式系列(5)——零宽断言

    本文主要总结了python正则零宽断言(zero-length-assertion)的一些常用用法. 1. 什么是零宽断言 有时候在使用正则表达式做匹配的时候,我们希望匹配一个字符串,这个字符串的前面 ...

  3. Python爬虫学习(4): python中re模块中的向后引用以及零宽断言

    使用小括号的时候,还有很多特定用途的语法.下面列出了最常用的一些: 表4.常用分组语法 分类 代码/语法 说明 捕获 (exp) 匹配exp,并捕获文本到自动命名的组里 (?<name>e ...

  4. 正则 ?<= 和 ?= 用法 以及零宽断言等概念

    正则 ?<=  和 ?= 用法   参考网址:http://baike.baidu.com/link?url=2zORJF9GOjU8AkmuHDLz9cyl9yiL68PdW3frayzLwW ...

  5. 从零宽断言说起到用python匹配html标签内容

    版权声明:本文为博主原创文章,转载请附带原文网址http://www.cnblogs.com/wbchanblog/p/7411750.html ,谢谢! 提示:本文主要是讲解零宽断言,所以阅读本文需 ...

  6. Python正则表达式进阶-零宽断言

    1. 什么是零宽断言 有时候在使用正则表达式做匹配的时候,我们希望匹配一个字符串,这个字符串的前面或后面需要是特定的内容,但我们又不想要前面或后面的这个特定的内容,这时候就需要零宽断言的帮助了.所谓零 ...

  7. JS不支持正则中的负向零宽断言

    今天在项目中用到了正则表达式,并且需要用负向零宽断言 (?<=exp) 进行筛选,结果运行时报 Invalid group 错,一开始以为是自己很久没用表达式写错了,查阅了一下正则语法后发现并没 ...

  8. js正则:零宽断言

    JavaScript正则表达式零宽断言 var str="abnsdfZL1234nvcncZL123456kjlvjkl"var reg=/ZL(\d{4}|\d{6})(?!\ ...

  9. js正则之零宽断言

    我们学到的正则表达式匹配,都是有“宽度”的,使用 \w+. 匹配下面文本,会将 . 一同匹配: regular. expression. 如果不想匹配符号,只匹配一个位置,就要用到“零宽断言”(匹配宽 ...

随机推荐

  1. 理解NSTextContainer

    Apple的Doc对这个类的描述是这样的: The NSTextContainer class defines a region where text is laid out. An NSLayout ...

  2. Oracle 中批量导入大量测试数据的方法

    执行如下批处理命令: declare  maxrecords constant int := 100000;  i int := 1;begin  for i in 1 .. 20000 loop   ...

  3. 【FreeBuf视频】《安全大咖说》专访知道创宇CTO杨冀龙(watercloud)

    [FreeBuf视频]<安全大咖说>专访知道创宇CTO杨冀龙(watercloud) 发布于 2016/05/16 FreeBuF.COM 杨冀龙,江湖人称watercloud,知道创宇公 ...

  4. hdu 2075

    PS:水得不能再水..刚开始还以为是大数..要用到快速幂...谁知道想太多...就普通int型.. 代码: #include "stdio.h" int main(){ int a ...

  5. 【Tsinghua OJ】隧道(Tunel)问题

    描述 现有一条单向单车道隧道,每一辆车从隧道的一端驶入,另一端驶出,不允许超车 该隧道对车辆的高度有一定限制,在任意时刻,管理员希望知道此时隧道中最高车辆的高度是多少 现在请你维护这条隧道的车辆进出记 ...

  6. 3、C#基础整理(语句概述)

    语句 语句分为四个大类: * 分支语句:if,if... else,if ...else if... else,switch case * 循环语句:for,while,do while,foreac ...

  7. 重定位shell

    http://www.tldp.org/LDP/abs/html/io-redirection.html http://unix.stackexchange.com/questions/20469/d ...

  8. Python 如何跳出多重循环

    Python 如何跳出多重循环 抛异常 return

  9. 微软官方好用的Office 2003、 Office 2007 或 Office 2010 卸载工具

    http://support.microsoft.com/kb/2519420/zh-cn

  10. 利用curl计算网络文件大小

    ; CURL *handle = curl_easy_init(); curl_easy_setopt(handle, CURLOPT_URL, url); curl_easy_setopt(hand ...