正則應用實例

有這么一個需求,將下面字符串中的鏈接篩選出來

這是第一個圖片<img >,
這是第二個圖片<img src="http://v.infuq.com" />

其中一個是用href,另一個是用src. 使用Python代碼處理如下

import re

def find():
    content = '這是第一個圖片<img >,這是第二個圖片<img src="http://v.infuq.com" />'
    ret = re.findall(r'(?<=[(src|href)]=")[^"]+(?=")', content)
    print(ret)

if __name__ == '__main__':
    find()

這個問題的關鍵點就是正則該如何寫,能寫出來正則,那么問題基本就解決了.正則表達式如下

(?<=[(src|href)]=")[^"]+(?=")

然而,上面的理解是不準確的
分析如下

(src|href)這個正則所能匹配的是src和href這兩個串.
[(src|href)]這個正則所能匹配的是( s r c | h r e f ) 這10個字符,而不是src和href這兩個串

因此,我們可以把最終的正則表示成如下

# href和src的最后一個字符分別是f和c
(?<=[fc]=")[^"]+(?=")

但是這樣還是不精確的,假如要匹配的內容是如下

這是第一個圖片<img >,
這是第二個圖片<img src="http://v.infuq.com" >
這是第三個圖片kf="https://img.infuq.com" />

我們最終的需求是要href和src的鏈接,使用 (?<=[fc]=")[^"]+(?=")能把kf="https://img.infuq.com"也匹配出來.

先在Sublime驗證下


在這里插入圖片描述

或者

在這里插入圖片描述

一樣也能精確匹配到需要的內容.

因此Python的代碼如下

import re

def find():
    content = '這是第一個圖片<img >,這是第二個圖片<img src="http://v.infuq.com" kf="http://q.infuq.com" />'
    
    # 這種寫法在Sublime可以,但是在Python中不支持
    # ret = re.findall(r'((?<=href=")|(?<=kf="))[^"]+(?=")', content)
    
    ret = re.findall(r'(?<=href=")[^"]+(?=")|(?<=src=")[^"]+(?=")', content)
    print(ret)

if __name__ == '__main__':
    find()
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容