Python 2.7的官网文档中的解释是:(?!...)Matches if ... doesn’t match next. This is a negative lookahead assertion. For example, Isaac (?!Asimov) will match 'Isaac ' only if it’s not followed by 'Asimov'.

下面,就来详细解释一下其中的含义:

1.negative lookahead assertion,此处我将其翻译为 前向否定匹配 或 前向否定断言

2.从字面意思就能看出,其含义是,从当前匹配的地方,继续向前看(lookahead),然后不希望(negative)找到对应的内容

其不论是语法还是所表示的含义,都正与:

相反;

关于示例代码,暂时就用回答某人的问题的那个代码:#!/usr/bin/python

# -*- coding: utf-8 -*-

"""

Function:

【教程】详解Python正则表达式之: (?!…) negative lookahead assertion 前向否定匹配 /前向否定断言

https://www.crifan.com/detailed_explanation_about_python_regular_express_negative_lookahead_assertion

Author: Crifan Li

Version: 2012-12-08

Contact: admin at crifan dot com

"""

import re;

txt ="bn','dd_ff');xm_a([1,'zhangming',0,2,'yuwenjige','lishijige',1,0,3,1,0,0.999,1,1,0,0]);xm_a([2,'wangmeng',0,2,'shuxuejige','dilijige',1,0,3,1,0,0.999,1,1,1,0]);xm_a([3,'wangli',0,2,'shuxuejige','dilijige',1,0,2,0,0,0.999,1,1,1,0]);zuobi(6,3,'4:5');fg_gh('xxx','vb_4');xm_a([4,'dashan',0,2,'huaxuejige','yingyujige',1,0,3,1,1,0.999,0,1,0,0]);";

#下面是普通的,常见的那种,搜索符合某种格式的字符串

allJigeIncludeZuobi = re.findall("xm_a\(\[\d+,'(\w+)',[^\(\)\[\]]+\]\);", txt);

print allJigeIncludeZuobi; #['zhangming', 'wangmeng', 'wangli', 'dashan']

#而对于其中,想要排除掉某种特殊的情况

#比如此处希望后面不带作弊的,即后面没有zuobi字样的

#则就可以使用 前向否定匹配,添加上对应的,不希望出现的内容,就可以过滤掉,对应的项了

#此处就可以实现,过滤掉作弊那位:wangli

allJigeNoZuobi = re.findall("xm_a\(\[\d+,'(\w+)',[^\(\)\[\]]+\]\);(?!zuobi)", txt);

print allJigeNoZuobi; #['zhangming', 'wangmeng', 'dashan']

【总结】

negative lookahead assertion,就是,除了正常的搜索匹配之外,继续往前走两步,继续看看,不要出现某些内容

以达到,在正常匹配到的内容的基础上,过滤掉某种不想要的内容。

python 正则表达式 断言 不定长表达式_【教程】详解Python正则表达式之: (?!…) negative lookahead assertion 前向否定匹配 /前向否定断言...相关推荐

  1. python 中split函数的应用_举例详解Python中的split()函数的使用方法

    函数:split() python中有split()和os.path.split()两个函数,具体作用如下: split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(li ...

  2. python动态显示进度条_实例详解python如何轻松实现动态进度条

    本次的这篇文章主要是和大家分享了关于实例详解python如何轻松实现动态进度条,有需要的小伙伴可以看一下 思路及讲解 假设有一个1000000数据的列表(为了让进度条可以显示出来,很大的数据),我们每 ...

  3. python open 打开是什么类型的文件-详解Python中open()函数指定文件打开方式的用法...

    文件打开方式 当我们用open()函数去打开文件的时候,有好几种打开的模式. 'r'->只读 'w'->只写,文件已存在则清空,不存在则创建. 'a'->追加,写到文件末尾 'b'- ...

  4. python用turtle画字母n、h_详解python使用turtle库来画一朵花

    看了群主最后成像的图片,应该是循环了36次画方框,每次有10度的偏移. 当然不能提前看答案,自己试着写代码. 之前有用过海龟画图来画过五角星.奥运五环.围棋盘等,所以感觉不难. # !/usr/bin ...

  5. python 正则表达式 断言 不定长表达式_MyEssay 之 Python正则表达式 —— 四种断言扩展的理解...

    我们经常用正则表达式来检测一个字符串中包含某个子串,要表示一个字符串中不包含单个的某字符或某些字符也很容易,用[^...]形式就可以了.但是要表示一个字符串中不包含某个子串(由字符序列构成)的时候,用 ...

  6. python官网下载步骤除了windows-python安装教程详解|python下载安装教程步骤

    Python是现在最受欢迎的编程语言,使用Python开发软件应用效率极高,相比其它语言有不可比拟的优势,Python是一种跨平台的计算机程序设计语言. 免费开源.最初被设计用于编写自动化脚本(she ...

  7. python下载步骤-python安装教程详解|python下载安装教程步骤

    Python是现在最受欢迎的编程语言,使用Python开发软件应用效率极高,相比其它语言有不可比拟的优势,Python是一种跨平台的计算机程序设计语言. 免费开源.最初被设计用于编写自动化脚本(she ...

  8. python twisted安装_图文详解python之twisted模块安装

    Twisted是一个事件驱动的网络框架. 最近开始学习了解Twisted,首先肯定要安装twisted模块. 但是在cmd下执行:pip install twisted 出现了下面的问题:" ...

  9. python手机版怎么运行项目或脚本-详解python运行三种方式

    方式一 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码. linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,提示窗口如下: $ p ...

最新文章

  1. ueditor html显示图片,百度ueditor编辑器上传图片后img标签的title、alt属性优化简单方法...
  2. 有关XSS编码问题的个人总结
  3. 第四范式陈雨强:万字深析工业界机器学习最新黑科技 By 机器之心2017年7月25日 16:38 近日,全球最顶级大数据会议 Strata Data Conference 在京召开。Strata 大
  4. c语言编制编程语言,C语言CGI编程入门(一)
  5. C#进阶之WebAPI(二)
  6. (四)将容器部署到Azure上的Kubernetes
  7. JSP中Session的使用
  8. Linux 内核中用 GFP_ATOMIC 申请内存究竟意味着什么?
  9. python和java反射_python实现反射功能
  10. android-手势-基础知识总结
  11. mysql repalication_MYSQL数据库知识点总结
  12. 56. Yii Modules
  13. Matlab PCA+SVM人脸识别(二)——GUI界面设计
  14. markdown语法测试
  15. java fianlly_Java冷知识:finally中的代码一定会执行吗?
  16. git switch 与 git checkout的不同
  17. Lumen企业站内容管理实战 - 欢迎页面
  18. wannafly summer camp day6
  19. origin Pro 9.0画多条三维折线图(此处以两条为例)
  20. CodeMirror 基础配置指南

热门文章

  1. 从方法到实践,银行如何搭建用户体验管理体系?
  2. 音视频技术开发周刊 | 248
  3. 从零开始学java(二十六)--多维数组,多维数组存储表格数据
  4. CC00009.python——|HadoopPython.v09|——|Arithmetic.v09|语法:核心语法运算符.V1|
  5. c51实现老人跌倒,心率异常报警系统
  6. Linux环境重启系统网卡down,linux重启网卡命令有哪些
  7. Qt Mainwindow添加/删除标题栏
  8. java爬取新浪微博带有“展开全文”的完整微博文本
  9. es6删除对象的某个属性
  10. TestFlight上架流程