python 正则表达式 断言_P18 Python正则表达式贪婪、向后引用、零款断言

title: P18|Python正则表达式中的贪婪、向后引用、零宽断言author: Adolph Leecategories: 编程基础tags:

Python

基础

正则表达式

断言

c8177f3e6709c93df57475159b7b1fd9d000541d.jpeg?token=c0b267747c05cc9b045db9c352ac2a0a&s=C1B43D735A79728253C41DE70300E020

在计算机编程中,正则表达式堪称我们处理字符串的神奇,许多复杂的工作,往往使用正则表达式就能简单的搞定。在之前我们已经涉及到了正则表达式的部分内容,下面我们来讲解一下有关正则表达式的贪婪模式,向后引用与零款断言。

贪婪模式

当正则表达式中包含能接受重复的界定符时,正则表达式会在能够匹配的情况下尽可能多的匹配字符。这种匹配模式我们称之为贪婪模式,但有时候我们需要程序不这么贪婪,还是更加懒惰一些,也就是需要程序尽可能少的匹配符合条件的字符串,贪婪模式与懒惰模式的切换只需要在原表达式后方加上一个问号。

实例一:'a.*b',这个表达式将会匹配以a开头以b结尾的所有字符串,例如'abbbabbbab',匹配的结果将是整个字符串,如果使用懒惰模式将正则表达式修改为'a.*?b',将只会匹配'ab'。

1b4c510fd9f9d72a643b7b28d26ccf31349bbb77.jpeg?token=cdd4b1a583943f22696143509b06c1f5&s=0350CD321F524C411C6401DA0000C0B2

实例二:匹配字符串中的所有url

d52a2834349b033b09e0d1d11188d1d6d539bd18.jpeg?token=cdf3b85de5fe20a3c3f420f6200e4633&s=0250CD3213D24C610AEDE1DA000080B1

分组

在讲解向后引用之前,我们先讲解一下分组,分组就是用一对圆括号()包裹起来的正则表达式内容,从正则表达式的左边开始每一个圆括号就是一个分组,分组的索引是从一开始的。

分组分为有命名分组和无命名分组

使用search分组完成后,可以通过group或者groups获取分组中的内容

在正则表达式前加上?P

为分组命名

5bafa40f4bfbfbed4a7424987cb61033aec31ff7.jpeg?token=38e974af36deb2f777af60046edc503a&s=0050EC3293704C204E55A4DE000010B2

向后引用

正则表达式中我们可以对整个分组进行一些正则操作,例如重复操作符。

\num 正则表达式中利用反斜杠加分组索引引用无命名分组

(?P=name) 正则表达式用利用(?P=name)引用命名分组

5bafa40f4bfbfbedf321b3d37cb61033aec31fe9.jpeg?token=0275d323965b721426bdae319b6734c0&s=1070EC324D264D2014F485DA0000C0B2

零宽断言

零宽断言是正则表达式的一种方法,用于查找在某些内容(但并不含这些内容)之前或之后的东西,也就是说它们是用于指定位置,这个位置应该满足一定的条件(断言),因此这些条件也常被称之为零宽断言。零宽断言可以分为前向肯定断言、前向否定断言、后向肯定断言、后向否定断言。

前向肯定断言(?=)

前向否定断言(?!)

后向肯定断言(?<=)

后向否定断言(?

前向肯定断言 (?=)

它断言自身出现的位置的后面能匹配表达式,例如匹配所有以ing结尾的单词,并只返回前面部分

d53f8794a4c27d1e87f5806013934a6bdcc4380a.jpeg?token=abfd65b6dd69e9ac9a4b5062f01cfcf4

前向否定断言 (?!)

它断言自身出现位置的后面不能包含指定表达式,例如匹配一个字符串中的四位数字,且这四位数字的后面不能是数字

ca1349540923dd542828a7d5d94f54db9d8248fb.jpeg?token=86e60b31d10419fec32bf3974baf79b6

后向肯定断言 (?<=)

它断言自身出现位置的前面能够匹配表达式,例如匹配所有以a开头的单词,并只返回单词除a以外的部分

9825bc315c6034a8e72a7801cc55ae5108237636.jpeg?token=d06acf406aefc6783ade021ea99e9a0e

后向否定断言 (?

它断言自身出现位置的前面不能包含指定表达式,例如匹配所有不以字母开头的数据

9825bc315c6034a8e72a7801cc55ae5108237636.jpeg?token=d06acf406aefc6783ade021ea99e9a0e

练习一

找出字符串中所有重复出现的单词

37d12f2eb9389b509f7814d7897302d8e6116e78.jpeg?token=918453baccbe12b179f93d3252487617

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值