(一)零宽断言

说明:本文的例子使用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. Mysql 基本操作连接数据库读取信息内容

    <?php header("content-type:text/html; charset=utf-8"); // 数据库配置信息 define("DB_HOST& ...

  2. (转)JSON数据格式和js操作json总结

    原:http://niutuku.com/tech/javaScript/273643.shtml JSON数据格式和js操作json总结 来源:niutuku.com |         vince ...

  3. 2016 - 1 - 20 runloop学习(2)

    一:CFRunLoopModeRef 1. CFRunLoopModeRef带表RunLoop的运行模式 2. 一个Runloop可以有若干个mode,每个mode又包含若干个sourse,timer ...

  4. 一次蜿蜒曲折的RFID破解之路

    前言 早一段时间看到一篇看雪论坛关于逻辑嗅探破解接触式IC卡口令的文章,激起鄙人对rfid的兴趣.遂准备拿学校的卡一展身手. 0×00 前期准备 经过初步了解,学校的rfid卡片分为两种.校园卡采用M ...

  5. 为什么SQL语句加 1=1

    是为了链接下面的查询条件条件,也或者是替换没有查询条件的语句.比如:要把检索条件作为一个参数传递给SQL,那么,当这个检索语句不存在的话就可以给它赋值为1=1.这样就避免了SQL出错,也就可以把加条件 ...

  6. Error Handling and Exception

    The default error handling in PHP is very simple.An error message with filename, line number and a m ...

  7. Configuring Squid as an accelerator/SSL offload for Outlook Web Access

    reference:http://wiki.squid-cache.org/SquidFaq/ReverseProxy/ Configuring Squid as an accelerator/SSL ...

  8. 4 Values whose Sum is 0_upper_bound&&ower_bound

    Description The SUM problem can be formulated as follows: given four lists A, B, C, D of integer val ...

  9. inno setup教程解释脚本

    inno setup教程解释脚本 2007-04-08 21:31:36|  分类: 科技-> Inno Setu |  标签:inno   |举报 |字号 订阅     下载LOFTER客户端 ...

  10. 四则运算app工程的进展

    深入分析五个四则运算app: 1.ALM-Addition 缺点:版本是英文版,不利于孩子们弄懂.  用选择题的方法来选择正确的答案,固然有运气答对的成分,不利于统计真实的水平. 优点:有图标统计答题 ...