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


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

更多教程:阿貓學編程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM