參考資料:https://tool.oschina.net/uploads/apidocs/jquery/regexp.html
| (?=pattern) | 正向肯定預查,在任何匹配pattern的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始。 |
|---|
| (?<=pattern) | 反向肯定預查,與正向肯定預查類擬,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。 |
|---|
| (?:pattern) | 匹配pattern但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以后使用。這在使用或字符“(|)”來組合一個模式的各個部分是很有用。例如“industr(?:y|ies)”就是一個比“industry|industries”更簡略的表達式。 |
|---|
參考:https://docs.python.org/zh-cn/3.7/library/re.html#re.Pattern.match
-
(?=…) -
匹配
…的內容,但是並不消費樣式的內容。這個叫做 lookahead assertion。比如,Isaac (?=Asimov)匹配'Isaac '只有在后面是'Asimov'的時候。
-
(?!…) -
匹配
…不符合的情況。這個叫 negative lookahead assertion (前視取反)。比如說,Isaac (?!Asimov)只有后面 不 是'Asimov'的時候才匹配'Isaac '。
-
(?<=…) -
匹配字符串的當前位置,它的前面匹配
…的內容到當前位置。這叫:dfn:positive lookbehind assertion (正向后視斷定)。(?<=abc)def會在'abcdef'中找到一個匹配,因為后視會往后看3個字符並檢查是否包含匹配的樣式。包含的匹配樣式必須是定長的,意思就是abc或a|b是允許的,但是a*和a{3,4}不可以。注意以 positive lookbehind assertions 開始的樣式,如(?<=abc)def,並不是從 a 開始搜索,而是從 d 往回看的。你可能更加願意使用search()函數,而不是match()函數:>>> import re >>> m = re.search('(?<=abc)def', 'abcdef') >>> m.group(0) 'def'這個例子搜索一個跟隨在連字符后的單詞:
>>> m = re.search(r'(?<=-)\w+', 'spam-egg') >>> m.group(0) 'egg'
example:
import re pattern1=re.compile(r'(?<=\().*') pattern2=re.compile(r'(?<=\().*(?=\))') str1 = pattern1.sub('0000000' ,'adod(23d)das') print(str1) str2 = pattern2.sub('0000000' ,'adod(23d)das') print(str2) m = re.search('(?<=abc)def', 'abcdef') print(m.group()) m1 = re.search('abcd(?=def)', 'abcddef abcdef') print(m1.group())
運行結果如下所示:
adod(0000000 adod(0000000)das def abcd
