第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 授權