零宽断言 python_正则表达式-零宽断言

[toc]

一、零宽断言-介绍

零宽断言,它匹配的内容不会提取,其作用是在一个限定位置的字符串向前或向后进行匹配查找。

1.1、应用场景

排除查找,查找不含有某段字符串的行

包含查找,查找含有某段字符串的行

二、断言的分类

2.1、正先行断言

什么是正先行断言,就是在字符串相应位置之前进行查找匹配,使用 (?=exp) 匹配exp前面的位置。

import re

str = 'abcgwcab'

pattern = 'bc(?=gw)'

result = re.search(pattern,str)

print(result.group())

# 输出结果

bc

解析:首先查找字符串”abcgwcab”中gw位置,断言为真,然后再匹配 bc,然后再向后匹配。

example:

pattern = 'bc(?=gw)ca'

# 匹配失败,因为找到了 gw 的位置后,断言为真,再向前匹配 bc ,再然后是从 bc 处进行匹配是 gwca ,所以会失败。

pattern = 'bc(?=gw)gwca'

# 匹配成功,输出结果

bcgwca

2.2、反先行断言

什么是反先行断言,使用 (?!exp) 匹配后面跟的不是exp。

import re

str = 'abcgwcab'

pattern = 'bc(?!ww)gw'

result = re.search(pattern,str)

print(result.group())

# 输出结果

bcgw

解析:首先判断字符串是否包含bc,然后判断其后面不是ww,断言为真,然后从 bc 处进行匹配 gw。

2.3、正后发断言

什么是正后发断言,就是在字符串相应位置之后进行查找匹配, (?<=exp) 匹配exp后面的位置

import re

str = 'abcgwcab'

pattern = '(?<=gw)ca'

result = re.search(pattern,str)

print(result.group())

# 输出结果

ca

解析:首先判断字符串是否包含 gw ,然后查找后面是否有 ca,存在,断言为真,则从 ca 处开始继续匹配。

example:

import re

str = 'abcgwcab'

pattern = 'gw(?<=gw)cab'

result = re.search(pattern,str)

print(result.group())

# 输出结果

gwcab

2.4、反后发断言

什么是反后发断言,就是在给定位置的字符串向前查找,(?

import re

str = 'abcgwcab'

pattern = '(?

result = re.search(pattern,str)

print(result.group())

# 输出结果

False

解析:首先查找字符串中是否包含 gw ,然后判断 gw 前面是不是 bc ,如果是则返回 False。 如果不是,则返回 True,然后从 gw 处开始匹配。

example:

import re

str = 'abcgwcab'

pattern = 'gw(?

result = re.search(pattern,str)

print(result.group())

# 输出结果

gwca

'''

在字符串中查找 ca ,然后判断其前面是不是 bc ,不是,返回 True ,然后从 ca 处开始匹配,匹配到 gw 。 则输出为 gwca

'''

三、排除查找

3.1、查找不以 baidu 开头的字符串

源文本

baidu.com

sina.com.cn

代码

import re

source_str = 'baidu.com\nsina.com.cn'

str_list = source_str.split('\n')

print(str_list)

for str in str_list:

pattern = '^(?!baidu).*$'

result = re.search(pattern,str)

if result:

print(result.group())

# 输出结果

sina.com.cn

解析:^(?!baidu).*$ 从行首开始匹配,查找后面不是 baidu 的字符串。(?!baidu) 这段是反先行断言

3.2、查找不以 com 结尾的字符串

源文本

baidu.com

sina.com.cn

www.educ.org

www.hao.cc

www.redhat.com

代码

import re

source_str = 'baidu.com\nsina.com.cn\nwww.educ.org\nwww.hao.cc\nwww.redhat.com'

str_list = source_str.split('\n')

print(str_list)

# ['baidu.com', 'sina.com.cn', 'www.educ.org', 'www.hao.cc', 'www.redhat.com']

for str in str_list:

pattern = '^.*?(?

result = re.search(pattern,str)

if result:

print(result.group())

# 输出结果

sina.com.cn

www.educ.org

www.hao.cc

解析:'^.?(?

3.3、查找文本中不含有 world 的行

源文本

I hope the world will be peaceful

Thepeoplestheworldoverlovepeace

Imissyoueveryday

Aroundtheworldin80Days

I usually eat eggs at breakfast

代码

import re

source_str = 'I hope the world will be peaceful\nThepeoplestheworldoverlovepeace\nImissyoueveryday\nAroundtheworldin80Days\nI usually eat eggs at breakfast'

str_list = source_str.split('\n')

print(str_list)

# ['I hope the world will be peaceful', 'Thepeoplestheworldoverlovepeace', 'Imissyoueveryday', 'Aroundtheworldin80Days', 'I usually eat eggs at breakfast']

for str in str_list:

pattern = '^(?!.*world).*$'

result = re.search(pattern,str)

if result:

print(result.group())

# 输出结果

Imissyoueveryday

I usually eat eggs at breakfast

解析:^ 首先匹配行首,(?!.*world) , 匹配行首后不能有 .*world 的字符, 也就是不能有 xxxxxxxworld 的字符。 这就排除了从行首开始后面有 world 字符的情况了。

四、实战操作

4.1、日志匹配(一)

从日志文件中过滤 [ERROR] 的错误日志,但错误日志又分两种,一种是带 _eMsg 参数的,一种是不带的。

需求是过滤出所有的错误日志,但排除 _eMsg=400 的行。

源文本

[ERROR][2020-04-02T10:27:05.370+0800][clojure.fn__147.core.clj:1] _com_im_error||traceid=ac85e854d7600001b6970||spanid=8a0a0084||cspanid=||serviceName=||errormsg=get-driver-online-status timeou||_eMsg=Read timed out||_eTrace=java.net.SocketTimeoutException: Read timed out

[ERROR][2020-04-02T10:30:17.353+0800][clojure.fn__147.core.clj:1] _com_im_error||traceid=0f05e854e38984b3f1f20||spanid=8a980083||cspanid=||serviceName=||errormsg=Handle request failed||_eMsg=400 Bad Request||_eTrace=sprin.web.Exception$BadRequest: 400 Bad Request

[ERROR][2020-03-25T09:21:16.186+0800][spring.util.HttpPoolClientUtil] http get error

代码

import re

source_str = '[ERROR][2020-04-02T10:27:05.370+0800][clojure.fn__147.core.clj:1] _com_im_error||traceid=ac85e854d7600001b6970||spanid=8a0a0084||cspanid=||serviceName=||errormsg=get-driver-online-status timeou||_eMsg=Read timed out||_eTrace=java.net.SocketTimeoutException: Read timed out\

\n[ERROR][2020-04-02T10:30:17.353+0800][clojure.fn__147.core.clj:1] _com_im_error||traceid=0f05e854e38984b3f1f20||spanid=8a980083||cspanid=||serviceName=||errormsg=Handle request failed||_eMsg=400 Bad Request||_eTrace=sprin.web.Exception$BadRequest: 400 Bad Request\

\n[ERROR][2020-03-25T09:21:16.186+0800][spring.util.HttpPoolClientUtil]'

str_list = source_str.split('\n')

# print(str_list)

for str in str_list:

pattern = '(^\[ERROR\].*?_eMsg(?!=400).*$)|^\[ERROR\](?!.*_eMsg).*'

result = re.search(pattern,str)

if result:

print(result.group())

# 输出结果

[ERROR][2020-04-02T10:27:05.370+0800][clojure.fn__147.core.clj:1] _com_im_error||traceid=ac85e854d7600001b6970||spanid=8a0a0084||cspanid=||serviceName=||errormsg=get-driver-online-status timeou||_eMsg=Read timed out||_eTrace=java.net.SocketTimeoutException: Read timed out

[ERROR][2020-03-25T09:21:16.186+0800][spring.util.HttpPoolClientUtil]

解析:(^\[ERROR\].*?_eMsg(?!=400).*$) 从行首匹配 [ERROR] ,.*? 忽略优先,优先忽略不匹配的任何字符。_eMsg(?!=400) 找到 _eMsg 字符串,匹配其后面是不是 =400 如果是返回 False。

之后 | 或逻辑符,^\[ERROR\](?!.*_eMsg).* 从行首匹配 [ERROR] ,然后匹配出不包含 xxxxxx_eMsg 的行。

写后面那串或逻辑的目的是为了匹配出,不包含 _eMsg 字段的错误日志。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS闭包—你不知道的JavaScript上卷读书笔记(二)

关于闭包&#xff0c;初学者会被绕的晕头转向&#xff0c;在学习的路上也付出了很多精力来理解。 让我们一起来揭开闭包神秘的面纱。 闭包晦涩的定义 看过很多关于闭包的定义&#xff0c;很多讲的云里雾里&#xff0c;晦涩难懂。让不少人以为闭包是多么玄乎的东西。在我看过的所…

img 错误样式css,css设置图片大小_css 控制img图片的大小样式

摘要 腾兴网为您分享:css 控制img图片的大小样式&#xff0c;掌上财富&#xff0c;优品多多&#xff0c;问作业&#xff0c;淘客联盟等软件知识&#xff0c;以及手机游戏开挂神器&#xff0c;au补丁&#xff0c;局域网监测&#xff0c;苹果录屏专家&#xff0c;重复文件删除&am…

python读取视频流做人脸识别_基于 Python + OpenCV 进行人脸识别,视频追踪代码全注释...

1 #-*- coding: utf-8 -*-2 from __future__ importunicode_literals3 #操作文件4 importos5 #科学计算6 importnumpy as np7 #图像识别8 importcv2 as cv9 #数据预处理, 该项目中只使用了标签编码10 importsklearn.preprocessing as sp111213 defload_imgs(directory):14 加载…

vue css load,vue css3loadding插件的开发以及npm包的发布管理

插件开发的话建议使用vue-gitment脚手架开发vue init webpack-simple vue-gitment如果提示执行cnpm install vue-cli -g 全局安装cnpm install vue-cli -g在次执行上面的命令完成之后可以看到这样的目录在src下面添加component loadding.js loadding.vueloadding.vueexport def…

python label显示图片_python 实现在tkinter中动态显示label图片的方法

在编程中我们往往会希望能够实现这样的操作&#xff1a;点击Button&#xff0c;选择了图片&#xff0c;然后在窗口中的Label处显示选到的图片。那么这时候就需要如下代码&#xff1a;from tkinter import *from tkinter.filedialog import askopenfilenamedef choosepic():path…

如何更改服务器上的数据库文件夹,如何设置数据库文件位置

如何设置数据库文件位置08/07/2014本文内容适用于&#xff1a; Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007上一次修改主题&#xff1a; 2007-01-02本主题说明如何使用 Exchange 管理控制台或 Exchange 命令行管理程…

js删除数组中指定元素_js中数组操作详解

今天给大家带来一篇有关数组操作方法的文章。新建数组方法一&#xff1a;通过new运算符创建一个数组构造函数。var arr new Array();方法二&#xff1a;通过方括号直接创建直接量数组。var arr [1,2,3];添加数组中的元素方法一&#xff1a;通过下标添加元素。var arr new Ar…

控制台文字对战游戏 初始版

namespace 对战游戏{ class Program { #region public struct JueSe //创建一个角色对象 { public string XingMing;//这个对象中有这些属性 public int GongJi; public int ShengMing; public int…

查询链接服务器信息,如何通过 SQL Server 链接服务器和分布式查询使用 Excel

作为链接服务器查询 Excel您可以使用企业管理器、系统存储过程或 SQL-DMO(分布式管理对象)将 Excel 数据源配置为 SQL Server 链接服务器。在所有的这些情况中&#xff0c;您总需要设置以下四个属性&#xff1a;链接服务器要使用的名称。连接要使用的 OLE DB 提供程序。Excel 工…

python画精美图案_Python语言的魅力------完美图案

1.画椭圆(代码如下)#!user/bin/python# -*- conding:UTF-8 -*-if __name__ __main__:from Tkinter import *canvas Canvas(width800,height600,bgpurple)canvas.pack(expandYES,fillBOTH)k 1j 1for i in range(0,26):canvas.create_oval(310 - k,250 - k,310 k,250 k,wid…

批量下载,多文件压缩打包zip下载

0、写在前面的话图片批量下载&#xff0c;要求下载时集成为一个压缩包进行下载。从昨天下午折腾到现在&#xff0c;踩坑踩得莫名其妙&#xff0c;还是来唠唠&#xff0c;给自己留个印象的同时&#xff0c;也希望给需要用到这个方法的人带来一些帮助。1、先叨叨IO叨叨IO是因为网…

选了combobox里的选项后没激发change事件_35岁前多用利弊分析,35岁后要有“安全边际”...

想冒险&#xff0c;要趁早1/6、距离糟糕的事情发生&#xff0c;还有多远&#xff1f;我现在同时在职场和投资两类战线写文章&#xff0c;读者也开始串戏。前几天在我另外一个投资号上&#xff0c;有人问我&#xff1a;如果你把投资理念原则扩大到生活中&#xff0c;你觉得最有启…

不连续曲线 highcharts_什么是正则曲线和正则曲面

微分几何和微分流形的书上经常提到“正则曲线”和“正则曲面”。其实英文书中写作”Regular Curve“和”Regular Surface“&#xff0c;让人一眼能够了解其大意&#xff08;这也是我更偏向看英文原版书的原因&#xff09;。我就想&#xff0c;数学家为啥不翻译成”规则曲线“和…

centos安装 node.js

curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash - yum clean all yum makecache yum -y install nodejs转载于:https://www.cnblogs.com/linkenpark/p/7810238.html

11.06

{% extendsdaohang.html %} {% block title %}发布问答{% endblock %} {% block head %}<link rel"stylesheet" href"{{ url_for(static,filenamecss/14.css) }}" type"text/css"> {% endblock %}{% block main %}<div class"box&…

python 安卓模拟器电脑版_【夜神安卓模拟器电脑版】夜神安卓模拟器电脑版 V6.6.0.6免费版官方免费下载_正式版下载-多特软件站...

夜神安卓模拟器是目前非常流行的一款安卓模拟器&#xff0c;相比一般的模拟器它具有更好的兼容性&#xff0c;稳定性&#xff0c;系统基于Android4.4.2&#xff0c;可以更好地兼容安卓软件&#xff0c;安卓游戏&#xff0c;可以放心使用&#xff0c;软件使用非常简单。相关软件…

python爬取10个网站_十个Python爬虫武器库示例,十个爬虫框架,十种实现爬虫的方法!...

一般比价小型的爬虫需求&#xff0c;我是直接使用requests库 bs4就解决了&#xff0c;再麻烦点就使用selenium解决js的异步 加载问题。相对比较大型的需求才使用框架&#xff0c;主要是便于管理以及扩展等。1.ScrapyScrapy是一个为了爬取网站数据&#xff0c;提取结构性数据而…

[W班]第二次结对作业成绩评价

作业地址&#xff1a; https://edu.cnblogs.com/campus/fzu/FZUSoftwareEngineering1715W/homework/1016 作业要求&#xff1a; 1、代码具有规范性。 2、实现的程序语言不做限制性要求&#xff0c;但需要能生成Windows平台的可执行文件。C/C/C#编译后即可生成&#xff0c;其他…

resnet50结构_无需额外数据、Tricks、架构调整,CMU开源首个将ResNet50精度提升至80%+新方法

本文是CMU的Zhiqiang Shen提出的一种提升标准ResNet50精度的方法&#xff0c;它应该是首个将ResNet50的Top1精度刷到80%的(无需额外数据&#xff0c;无需其他tricks&#xff0c;无需网络架构调整)。该文对于研究知识蒸馏的同学应该是有不少可参考的价值&#xff0c;尤其是里面提…

msp430项目编程14

msp430中项目---电子测重系统 1、hx711工作原理 2、电路原理说明 3、代码&#xff08;显示部分&#xff09; 4、代码&#xff08;功能实现&#xff09; 5、项目总结 msp430项目编程msp430入门学习转载于:https://www.cnblogs.com/guochaoxxl/p/7818040.html