正則提取關鍵字符-python代碼實現

原文地址: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/

更多教程:阿貓學編程

相關文章
相關標籤/搜索