Python 正則零寬斷言及命名捕獲 類PHP

2021-09-08 12:02:17 字數 2610 閱讀 1960

(一)零寬斷言

說明:本文的例子使用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裡面的字串行)

['

111', '

333']

2、前向否定界定(否定順序環視)(?!exp)

表示右邊不匹配exp表示式

strtest = "

aaa111aaa , bbb222&, 333ccc

"strre = r"

\d+(?![a-z]+)

"reobj =re.compile(strre)

print reobj.findall(strtest)

輸出:(正則的意思是找出連續的數字,並且最後乙個數字後面不能跟任何乙個a-z裡面的字串行)

['

11', '

222', '

33']

3、反向界定(肯定逆序環視)(?<=exp)文字必須定長

表示左邊要匹配exp表示式

strtest = "

aaa111aaa , bbb222&, 333ccc

"strre = r"

(?<=[a-z])\d+

"reobj =re.compile(strre)

print reobj.findall(strtest)

輸出:(正則的意思是找出連續的數字,並且第乙個數字的前面要是a-z中的乙個字元)

['

111', '

222']

4、反向否定界定(否定逆序環視)(?文字必須定長

表示左邊不要匹配exp表示式

strtest = "

aaa111aaa , bbb222&, 333ccc

"strre = r"

(?reobj =re.compile(strre)

print reobj.findall(strtest)

輸出:(正則的意思是找出連續的數字,並且第乙個數字的前面不能是a-z中的乙個字元)

['

11', '

22', '

333']

這裡要注意的乙個問題是:在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:9527tom:9527tom  

9527(

'tom

', '

9527

')

tom

9527

無捕獲組的使用也是類似,語法:(?:exp)只是無捕獲組匹配exp,但不捕獲匹配的文字,也不給這個組分配組號

正則 零寬斷言

在使用正規表示式時,有時我們需要捕獲的內容前後必須是特定內容,但又不捕獲這些特定內容的時候,零寬斷言就起到作用了 正規表示式中有前瞻 lookahead 和後顧 lookbehind 的概念,這兩個術語非常形象的描述了正則引擎的匹配行為。需要注意一點,正規表示式中的前和後和我們一般理解的前後有點不同...

Java正則零寬斷言

零寬斷言的意思是 匹配寬度為零,滿足一定的條件 斷言 我也不知道這個詞語是那個王八蛋發明的,簡直是太拗口了。零寬斷言用於查詢在某些內容 但並不包括這些內容 之前或之後的東西,也就是說它們像 b 這樣的錨定作用,僅僅用於指定乙個位置,不參與內容匹配,這個位置應該滿足一定的條件 即斷言 因此它們也被稱為...

正則基礎 零寬斷言

要多敲 注釋要清晰 零寬斷言 importre 零寬斷言 exp 零寬度正 先行斷言 先行斷言的執行步驟從要匹配的字元的最右端找到第乙個ing,再匹配前面的表示式,如果無法匹配則查詢第二個ing pattern re.compile r a z ing s pattern.findall i lov...