參考資料: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