引用分組上例中import re
a ='123.123.123.aaa.aaa.aaa'
reg =
'(\d)(.\\1).(\w)(.\\3)'
res = re.search(reg,a)
(res)
#
\\1
代表引用第乙個分組\d
;\\3
代表引用第三個分組\w
引用文字內容由上例,import re
a ='123.234.345.456'
b ='123.123.123.123'
reg =
'(\d)(.\\1)'
resa = re.search(reg,a)
resb = re.search(reg,b)
(resa,
'\n'
,resb)
'''輸出
none
'''
後向引用,引用的僅僅是文字內容,而不是正規表示式
也就是說,組中的內容一旦匹配成功,後向引用,引用的就是匹配成功後的內容,引用的是結果,而不是表示式。
分組編號規律
無論括號如何巢狀,分組的編號都是根據開括號出現的順序來計數的;開括號是從左至右數起第多少個開括號,分組編號就是多少。如下圖:
指明某個字串前邊或者後邊,將會出現滿足某種規律的字串
如:(?<=).*(?=) 或者 (?<=).*(?=)
例:匹配 中國人的「人」而不匹配 外國人的「人」a =
'這裡是標題內容'
reg =
'(?<=).*(?=)'
# 或# reg = '(?<=).*(?=)'
resa = re.search(reg,a)
(resa)
#
例:匹配 中國製造的「中國」b =
'外國人中國人'
reg1 =
'(?reg2 =
'人'res1 = re.search(reg1,b)
res2 = re.search(reg2,b)
(res1,
'\n'
,res2)
'''輸出
'''
如同^代表開頭,$代表結尾,\b代表單詞邊界一樣,先行斷言和後行斷言也有類似的作用,它們只匹配某些位置,在匹配過程中,不占用字元,所以被稱為「零寬」。所謂位置,是指字串中(每行)第乙個字元的左邊、最後乙個字元的右邊以及相鄰字元的中間(假設文字方向是頭左尾右)b =
'中國生產中國製造'
reg1 =
'中國(?!生產)'
res1 = re.search(reg1,b)
(res1)
'''輸出
'''
理解
關於先行(lookahead)和後行(lookbehind)
正規表示式引擎在執行字串和表示式匹配時,會從頭到尾(從前到後)連續掃瞄字串中的字元,設想有乙個掃瞄指標指向字元邊界處並隨匹配過程移動。先行斷言,是當掃瞄指標位於某處時,引擎會嘗試匹配指標還未掃過的字元,先於指標到達該字元,故稱為先行。後行斷言,引擎會嘗試匹配指標已掃過的字元,後於指標到達該字元,故稱為後行。
關於正向(positive)和負向(negative)
正向就表示匹配括號中的表示式,負向表示不匹配。
正規表示式 零寬斷言
零寬斷言的意思是 匹配寬度為零,滿足一定的條件 斷言 零寬斷言用於查詢在某些內容 但並不包括這些內容 之前或之後的東西,也就是說它們像 b 這樣的錨定作用,用於指定乙個位置,這個位置應該滿足一定的條件 即斷言 因此它們也被稱為零寬斷言。斷言用來宣告乙個應該為真的事實。正規表示式中只有當斷言為真時才會...
正規表示式 零寬斷言
今天在codewars.com做練習,遇到乙個正規表示式相關的題目regex password validation 題目很簡單,對字串進行校驗,規則如下 1.長度至少有6位 2.包含小寫字母 3.包含大寫字母 4.包含數字 5.僅由數字和字母組成 對於2.3.4這3個條件,沒辦法寫在乙個正則裡面,...
正規表示式 零寬斷言
接下來的四個用於查詢在某些內容 但並不包括這些內容 之前或之後的東西,也就是說它們像 b 那樣用於指定乙個位置,這個位置應該滿足一定的條件 斷言 因此它們也被稱為零寬斷言。最好還是拿例子來說明吧 exp 也叫零寬度正 先行斷言,它斷言自身出現的位置的後面能匹配表示式exp 比如 b w ing b ...