原文地址:http://www.bugingcode.com/blog/python_re_extraction_key.htmlhtml
關於python
的正則使用在之前的文章中 http://www.bugingcode.com/blog/python_regular_expressions.html ,都有介紹,可是這邊文章比較大,內容講的不夠細,這裏專門講如何用python正則匹配到本身須要的字符串。python
仍是以url字符串來進行匹配:http://www.bugingcode.com/blog/python_regular_expressions.html,url的字符串有明顯的同樣,bugingcode
爲域名,blog
爲目錄名,python_regular_expressions
爲文章的名稱。在這裏須要把這三個字符串都提取出來。正則表達式
查看正則匹配規則:express
.
: 匹配任意除換行符"\n"外的字符
+
: 匹配前面字符1次到無限次編程
在咱們能夠用/
來對提取的字符進行限制,也就是卡死頭和尾,看看會獲得什麼樣的結果。url
import re str = "http://www.bugingcode.com/blog/python_regular_expressions.html" print re.findall(r"/(.+)/",str)
會輸出什麼樣的結果呢?code
有人猜結果:htm
['/www.bugingcode.com','blog']
不可能出現這種結果的,由於r"/(.+)/"
中已經把/
用掉了,往下匹配已經找不到/
號了。blog
有人猜結果:教程
['/www.bugingcode.com']
也有人猜:
['/www.bugingcode.com/blog']
這是關於正則表達式的貪婪和非貪婪匹配,簡單的記住正則匹配中有出現 ?
纔是 非貪婪匹配,這裏的正則匹配是貪婪的,也就是最大的匹配狀況,通常來講咱們選用的是非貪婪
模式。
import re str = "http://www.bugingcode.com/blog/python_regular_expressions.html" print re.findall(r"//(.+?)/",str)
匹配的結果爲:
['www.bugingcode.com']
剛纔說了一個(.+?)
只能匹配到一個字符串,而咱們須要提取 三個字段:bugingcode
爲域名,blog
爲目錄名,python_regular_expressions
。
import re str = "http://www.bugingcode.com/blog/python_regular_expressions.html" print re.findall(r"www.(.+?).com/(.+?)/(.+?).html", str)
輸出以下咱們須要的結果:
[('bugingcode', 'blog', 'python_regular_expressions')]
再來一個看看是什麼結果:
import re str = "http://www.bugingcode.com/blog/python_regular_expressions.htmlhttp://www.bugingcode.com/blog/python_regular_expressions.html" print re.findall(r"www.(.+?).com/(.+?)/(.+?).html", str)
有的時候須要提取的字符串比較複雜是,能夠經過不斷的進行嘗試,先把條件放的比較苛刻,後面在慢慢的放開,找到本身須要的字符串。
轉載請標明來之:http://www.bugingcode.com/
更多教程:阿貓學編程