首页 > 其他分享 >正则表达式环视匹配(?=pattern)、(?!pattern)、(?<=pattern)、(?<!pattern)怎么用

正则表达式环视匹配(?=pattern)、(?!pattern)、(?<=pattern)、(?<!pattern)怎么用

时间:2023-02-17 21:33:58浏览次数:40  
标签:匹配 正则表达式 pattern EF Windows 环视

今天在处理数据的时候遇到一个,需要用正则表达式匹配不包含某字符的字符串的问题,用到否定匹配,现总结如下:

一个正则小知识 ↓
 []:表示范围,匹配其中任何一个
 {}:表示重复匹配多次。
 ():表示分组,意思就是括号内是一个整体。
----
(?=pattern)正向肯定环视。例如“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。
(?!pattern)正向否定环视。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。
(?<=pattern)反向肯定环视。例如“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。
(?<!pattern)反向否定环视。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。
-----
关于环视有一个点需要注意就是,环视并不消耗字符,也就是说() 括号中的内容只是会被匹配一下,确定是否符合情况,如果不符合,环视结束之后
依然会从最原始的地方开始匹配。

举个栗子:
目标字符串:ABCDEFG
正则表达式:CD(?=EF)G
问:能否匹配到该字符串
答:不能
原因就在于环视不消耗字符,在这个例子匹配的过程中,首先CD匹配到了,然后环视右侧存在EF,继续匹配,但是注意此时继续匹配的点是从“D”开始的,
也就是说从“D”开始检查后面是不是“G”,那么当然不是,CD后面是EF,也就是说EF仅仅被查看,并没有被真的匹配。

import re

myList = ["退化草地;;;改良措施;","硫化氢;呼吸节律;"]

for data in myList:
    dataNew3 = re.match('^(?=.*;;).*$',data)
    print(dataNew3)
# 匹配带有三个连续英文分号的字符串,正向肯定环视。

(注:反向环视,不能出现不确定数目的字符表达式,比如不能有“.*”。正向没有要求。)

标签:匹配,正则表达式,pattern,EF,Windows,环视
From: https://www.cnblogs.com/rainbow-1/p/17131488.html

相关文章

  • 精通正则表达式 - 实例
    1.正整数正则表达式:/^(?!0)[0-9]+$/不以0开头functionisInteger(value){return/^(?!0)[0-9]+$/.test(value);}2.非0数正则表达式:/^\-?0\.[0-9]*[1-9]+[0-......
  • [转]正则表达式“\w”无法正常匹配中文
    原文地址:正则表达式“\w”无法正常匹配中文-YFEYI-博客园(cnblogs.com)使用webstorm的替换功能,使用正则,发现\w只能匹配英文,不支持中文,搜索到这篇博文,进行记......
  • jmeter正则表达式提取器
    正则表达式提取器:允许用户从服务器的响应中通过使用perl的正则表达式提取值。该元素会作用在指定范围取样器,用正则表达式提取所需值,生成模板字符串,并将结果存储到给定的......
  • 详解Cake Pattern in rocket-chip
    下面分别对cakepattern中的关键概念进行说明,最后以chipyard为例对cakepattern的用法进行说明,cakepattern对Diplomacy机制至关重要。一、LazyModule定义惰性模块,实现......
  • Python 高级编程之正则表达式(八)
    目录一、概述二、正则表达式语法1)字符匹配2)字符集合3)定位符4)分组1、定义分组2、引用分组3、命名分组三、Python的re模块1)re.match()方法2)re.search()方法3)re.match()......
  • [Typescript] Creating Chainable Method Abstractions with Generics and the Builde
    import{expect,it}from"vitest";import{fetchUser}from"fake-external-lib";typeMiddleware<TInput,TOutput>=(input:TInput)=>TOutput;classDyna......
  • 常用正则表达式
    非空/^.+$/正整数正则(不包括0)/^[1-9]\d*$/正整数正则(包括0)/^[+]{0,1}(\d+)$/正数的正则表达式(不包括0,小数保留两位)^((0{1}.\d{1,2})|([1-9]\d.{1}\d{1,2})......
  • 直播平台开发,电话号码正则表达式
    直播平台开发,电话号码正则表达式 //正则表达式letreg_tel=/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/ if(reg_tel.test(pho......
  • Python正则表达式
    使用正则表达式正则表达式相关知识在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要,正则表达式就是用于描述这些规则的工具,换句话说正则表达......
  • Linux系统Shell脚本:shell数组、正则表达式及文件三剑客之AWK
    一、shell数组1、数组分类①关联数组:必须声明才可以使用,命令:delare-A数组名②普通数组:利用数字下标节约变量,可以不声明也可以声明,命令:delare-a数组名delare-a命令也......