原文地址:http://www.bugingcode.com/blog/python_re_extraction_key.html
關於python
的正則使用在以前的文章中 http://www.bugingcode.com/blog/python_regular_expressions.html ,都有介紹,但是這邊文章比較大,內容講的不夠細,這里專門講如何用python正則匹配到自己需要的字符串。
正則提取數據
還是以url字符串來進行匹配:http://www.bugingcode.com/blog/python_regular_expressions.html,url的字符串有明顯的一樣,bugingcode
為域名,blog
為目錄名,python_regular_expressions
為文章的名稱。在這里需要把這三個字符串都提取出來。
貪婪和非貪婪匹配
查看正則匹配規則:
.
: 匹配任意除換行符"\n"外的字符
+
: 匹配前面字符1次到無限次
在我們可以用/
來對提取的字符進行限制,也就是卡死頭和尾,看看會得到什么樣的結果。
import re
str = "http://www.bugingcode.com/blog/python_regular_expressions.html"
print re.findall(r"/(.+)/",str)
會輸出什么樣的結果呢?
有人猜結果:
['/www.bugingcode.com','blog']
不可能出現這種結果的,因為r"/(.+)/"
中已經把/
用掉了,往下匹配已經找不到/
號了。
有人猜結果:
['/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/
更多教程:阿貓學編程