第23天:正則表達式
課程簡介
正則表達式(Regular Expression,簡稱 Regex)是一種用於字串模式匹配和處理的工具。它在處理文字時非常強大,可以用來搜尋、替換、或驗證特定的字串模式。Python 提供了內建的 re 模組來支持正則表達式操作。在今天的課程中,我們將學習正則表達式的基本語法和常見的應用場景。
學習內容
1. re 模組的基本操作
在 Python 中,re 模組提供了多種用於正則表達式的函數:
re.search():搜尋與正則表達式匹配的第一個結果。re.findall():找出所有匹配的結果。re.match():檢查字串開頭是否符合正則表達式。re.sub():替換符合條件的字串。
範例:
1
2
3
4
5
6
import re
# 搜尋字串中是否有 "cat"
result = re.search(r'cat', 'I have a cat.')
if result:
print("找到匹配")
2. 基本正則表達式語法
2.1 字符匹配
.:匹配任意單一字符。[]:匹配括號內任意字符。例如,[a-z]匹配小寫字母,[0-9]匹配數字。^:匹配字串的開頭。例如,^Hello匹配以 “Hello” 開頭的字串。$:匹配字串的結尾。例如,end$匹配以 “end” 結尾的字串。\:用來轉義特殊字符。
範例:
1
2
3
result = re.search(r'[0-9]', 'I have 2 cats')
if result:
print("找到數字")
2.2 重複匹配
*:匹配前面的字符零次或多次。例如,a*匹配零個或多個a。+:匹配前面的字符一次或多次。例如,a+匹配至少一個a。?:匹配前面的字符零次或一次。例如,a?匹配零個或一個a。{n}:匹配前面的字符恰好 n 次。例如,a{3}匹配三個a。{n,m}:匹配前面的字符至少 n 次,最多 m 次。
範例:
1
2
3
4
# 匹配至少一個數字
result = re.search(r'\d+', 'Order number is 12345')
if result:
print("找到數字:", result.group())
2.3 分組與選擇
|:表示 “或” 的關係。例如,cat|dog匹配 “cat” 或 “dog”。():用來分組。例如,(ab)+匹配 “ab” 的一次或多次出現。
範例:
1
2
3
result = re.search(r'(cat|dog)', 'I have a dog.')
if result:
print("找到動物:", result.group())
3. 常見應用場景
3.1 驗證 Email 地址
正則表達式可以用來驗證 Email 格式是否正確。
範例:
1
2
3
4
5
6
email = 'test@example.com'
pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
if re.match(pattern, email):
print("有效的 Email")
else:
print("無效的 Email")
3.2 搜尋電話號碼
使用正則表達式可以從字串中提取電話號碼。
範例:
1
2
3
4
5
text = 'My phone number is 123-456-7890.'
pattern = r'\d{3}-\d{3}-\d{4}'
phone = re.search(pattern, text)
if phone:
print("找到電話號碼:", phone.group())
3.3 字串替換
可以使用 re.sub() 將字串中的特定部分替換為其他內容。
範例:
1
2
3
text = 'I love cats. Cats are great.'
new_text = re.sub(r'cat', 'dog', text, flags=re.I)
print(new_text) # 輸出: 'I love dogs. Dogs are great.'
4. 常用標誌(Flags)
re.IGNORECASE或re.I:忽略大小寫。re.MULTILINE或re.M:多行模式,^和$匹配每一行的開頭和結尾。re.DOTALL或re.S:讓.匹配換行符。
範例:
1
2
3
result = re.search(r'cat', 'I love CATs', flags=re.I)
if result:
print("忽略大小寫匹配")
教學重點
- 正則表達式的基本語法:理解如何使用字符匹配、重複匹配及分組來進行模式匹配。
re模組的基本操作:學會使用search()、match()、findall()和sub()等函數來處理字串。- 正則表達式的應用場景:能夠使用正則表達式進行資料驗證、搜尋和替換。
- 常用標誌:了解如何使用
IGNORECASE、MULTILINE等標誌來調整匹配行為。
任務
- 使用正則表達式匹配一個 Email 地址,並驗證其格式是否正確。
- 編寫一個程式,使用正則表達式從一段文字中提取所有的電話號碼。
- 使用
re.sub()將一段文字中的所有 “Python” 替換成 “Java”。 - 使用正則表達式匹配字串中的所有大寫字母,並將其轉換為小寫。
本文章以 CC BY 4.0 授權