引言
正則表達式是一種富強的文本處理東西,在Python編程中有著廣泛的利用。特別是在數據提取跟清洗方面,正則表達式可能幫助我們疾速正確地從大年夜量文本中獲取所需信息。本文將深刻探究Python中正則表達式的捕獲技能,幫助讀者輕鬆控制數據提取的藝術。
正則表達式基本
在Python中,正則表達式經由過程re
模塊實現。re
模塊供給了一系列用於操縱正則表達式的函數,如re.search()
、re.findall()
、re.sub()
等。
正則表達式語法
正則表達式由壹般字元跟特別字元(元字元)構成。以下是一些罕見的元字元:
.
:婚配除換行符以外的咨意字元。[]
:婚配括弧內的咨意一個字元。[^]
:婚配不在括弧內的咨意一個字元。*
:婚配前面的子表達式零次或多次。+
:婚配前面的子表達式一次或多次。?
:婚配前面的子表達式零次或一次。{n}
:婚配前面的子表達式剛好n次。{n,}
:婚配前面的子表達式至少n次。{n,m}
:婚配前面的子表達式至少n次,但不超越m次。
捕獲組
正則表達式中的捕獲組容許我們提取婚配的子字元串。捕獲組經由過程圓括弧()
表示,並可能利用以下方法引用:
\1
:引用第一個捕獲組。\2
:引用第二個捕獲組。- …:以此類推。
捕獲技能
1. 基本捕獲
以下是一個基本捕獲的例子:
import re
text = "我的郵箱是example@example.com,手機號是13812345678。"
pattern = r"(\w+@\w+\.\w+)|(\d{11})"
matches = re.findall(pattern, text)
for match in matches:
print(match)
輸出:
('example@example.com', '13812345678')
在這個例子中,我們利用兩個捕獲組分辨婚配郵箱地點跟手機號。
2. 貪婪與非貪婪婚配
默許情況下,正則表達式採用貪婪婚配形式,即儘可能多地婚配字元。非貪婪婚配形式可能經由過程在量詞前面增加?
來實現。
以下是一個貪婪婚配跟非貪婪婚配的例子:
import re
text = "這個字元串包含多個婚配:12345、67890、1234567890。"
pattern = r"(\d+)"
matches = re.findall(pattern, text)
print(matches) # 貪婪婚配
print(matches) # 非貪婪婚配
輸出:
['12345', '67890', '1234567890']
['12345', '67890', '12345']
3. 回溯引用
回溯引用容許我們在正則表達式中引用之前婚配的子字元串。
以下是一個回溯引用的例子:
import re
text = "這是一個重複的字元串:abcabcabc。"
pattern = r"(\w+)\1"
matches = re.findall(pattern, text)
print(matches)
輸出:
['abcabc', 'abcabc']
在這個例子中,我們利用\1
引用第一個捕獲組婚配的字元串。
實戰案例
1. 提取網頁中的圖片地點
以下是一個提取網頁中圖片地點的例子:
import re
html = """
<html>
<head><title>示例網頁</title></head>
<body>
<p>這是一張圖片:<img src="image1.jpg" alt="圖片1"></p>
<p>這是另一張圖片:<img src="image2.png" alt="圖片2"></p>
</body>
</html>
"""
pattern = r"<img\s+[^>]*src=['\"]?([^'\"]+)['\"]?[^>]*>"
matches = re.findall(pattern, html)
print(matches)
輸出:
['image1.jpg', 'image2.png']
在這個例子中,我們利用正則表達式婚配<img>
標籤的src
屬性,並提取圖片地點。
2. 清洗德律風號碼
以下是一個清洗德律風號碼的例子:
import re
text = "這個德律風號碼是:+86-13812345678。"
pattern = r"\+?86-?\s?(\d{11})"
matches = re.findall(pattern, text)
print(matches)
輸出:
['13812345678']
在這個例子中,我們利用正則表達式婚配德律風號碼,並去除其中的特別字元跟空格。
總結
正則表達式在Python中的捕獲技能可能幫助我們輕鬆地提取所需數據。經由過程控制基本語法、捕獲組跟實戰案例,我們可能更好地利用正則表達式停止數據提取跟清洗。在現實利用中,壹直練習跟積聚經驗,將使我們在數據處理方面愈加隨心所欲。