以下內容由於編輯器的原因,有些是用中文字元代替英文本元
(?=)正向向前查詢 (?<=)正向向後查詢
(?! )負向向前查詢 (?<!)負向向後查詢
1.(?=)正向前查詢
向前查詢指定了乙個必須匹配但不在結果中返回的模式。向前查詢實際上是乙個子表示式,所以要用()括起來。向前查詢模式其實就是乙個以?=開頭的字表示式,需要匹配的文字跟在=的後面。
後面會用到術語「消費」(consume),表示「匹配和返回文字」。在向前查詢裡,被匹配的文字不包含在最終返回的匹配結果裡,這被稱為「不消費」
看乙個例子
文字 \
正規表示式 .+(?=:)
匹配結果\http:
可以看到字表示式(?=:)匹配:,但被匹配的:沒有出現在最終的匹配結果裡,我們用?=向正規表示式引擎表明:只要找到:就行了,不要把它包括在最終結果裡。用術語來說,就是」不消費」它。
2.(?<=)正向後查詢
廢話不多說,看個例子。
文字 d23.90 d12.32 d12.34 33.33
正規表示式 (?<=d)[0-9.]+
匹配結果 d23.9023.90 d12.3212.32 d12.3412.34 33.33
可以看到$沒有出現在匹配結果裡,也不會匹配到33.33。
注意:向前查詢模式的長度是可變的,它們可以包含.、、+之類的元字元;而向後查詢模式只能是固定長度,不能包含.、、+之類的元字元。
這句話的意思是值:(?<=t+)這種就是非法的!,而(?=t+)是合法的。
剛開始我以為是指子表示式後不能跟* +這種元字元,後來測試了一下發現是這個意思。
3.(?!)負向前查詢
向前查詢和向後查詢通常用來匹配文字,通過指定匹配結果的前後必須是哪些文本來限定匹配結果文字的位置。術語」正「的意思是尋找匹配的事實。所以負向查詢中的術語」負」是指不與給定模式向匹配的文字。相當於取非
看個例子
文字 the book cost and the phone cost 1000 2d
正規表示式\d+(?!d)
匹配結果the book cost and the phone cost10002d
可以看到匹配的是不以$開頭的數值。
4.(?<!d)負向後查詢
舉個例子
文字 the d2 wow 30
正規表示式 (?<!d)\d+
匹配結果 the d2 wow30
5.向前查詢向後查詢混合使用
舉個例子
文字(title)ben hah wowo(/title)
正規表示式 (?<=(title)).*(?=(/title))
匹配結果 (title)ben hah wowo(/title)
測試的過程中發現了乙個不理解的例子
文字(title)ben hah wowo(/title)
正規表示式(?<!(title)).*(?!(/title))
匹配結果是(title)ben hah wowo(/title)和乙個空格
…….待修改
(?<=)與(?=)哪個是前向哪個是後向容易混,可以這樣記:<=箭頭指向的方向相反。(雖然有點羅嗦,但也算一種方法吧,免得記錯)
正規表示式 前後查詢(六)
前面講到的正規表示式都是如何匹配表示式所表達的意思,如 a z 是匹配1個以上a z的字母。今天我們講到的是前後查詢的例子,首先我們講到向前查詢的語法 表示式 我們舉乙個例子,假設我們在如下列表中想獲取協議名 https 按照我們一般的寫法是 a z 這樣寫存在乙個問題,就是會匹配 本身。這樣就不是...
python正規表示式元字元 正規表示式
字元 描述將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...
Python 正規表示式
1.在python中,所有和正規表示式相關的功能都包含在re模組中。2.字元 表示 字串的末尾 如 road 則表示 只有當 road 出現在乙個字串的尾部時才會匹配。3.字元 表示 字元中的開始 如 road 則表示 只有當 road 出現在乙個字串的頭部時才會匹配。4.利用re.sub函式對字串...