十個案例快速掌握 Python 正則表達式使用
作者:用戶007
在Python中,通過re模塊可以輕松實現數據清洗、表單驗證、日志分析等任務。本文通過十個實用案例,帶你從零掌握正則表達式的基礎用法!
正則表達式(Regex)是一種強大的文本模式匹配工具,它能讓你用簡潔的語法描述復雜的文本規則。在Python中,通過re模塊可以輕松實現數據清洗、表單驗證、日志分析等任務。本文通過10個實用案例,帶你從零掌握正則表達式的基礎用法!
案例1:匹配純文本
最簡單的正則表達式就是直接匹配文本內容。
import re
text = "Hello, world! Python is amazing."
pattern = r"Python" # 匹配"Python"字符串
result = re.findall(pattern, text)
print(result) # 輸出: ['Python']
- r前綴表示原始字符串,避免轉義問題
- 字母區分大小寫(默認)
- findall()返回所有匹配項列表
案例2:匹配任意單個字符
使用.匹配任意單個字符(除換行符外)。
text = "cat bat hat rat"
pattern = r".at" # 匹配任意"xat"組合
result = re.findall(pattern, text)
print(result) # 輸出: ['cat', 'bat', 'hat', 'rat']
- .是通配符,匹配任意字符
- 常與其他字符組合使用
案例3:匹配字符集合
使用[]匹配指定字符集合中的任一字符。
text = "Apple, Banana, Cherry, Date"
pattern = r"[BCD][a-z]+" # 匹配以B/C/D開頭的小寫單詞
result = re.findall(pattern, text)
print(result) # 輸出: ['Banana', 'Cherry', 'Date']
- [ABC]匹配A、B或C
- [A-Z]匹配任意大寫字母
- [a-z]匹配任意小寫字母
- [0-9]匹配任意數字
案例4:匹配數字字符
\d是匹配數字的快捷方式。
text = "訂單號:12345,金額:¥599.00"
pattern = r"\d+" # 匹配連續數字
result = re.findall(pattern, text)
print(result) # 輸出: ['12345', '599', '00']
- \d等價于[0-9]
- \d+匹配一個或多個數字
- \D匹配非數字字符
案例5:匹配空白字符
\s匹配各種空白字符。
text = "Python\tis\nawesome!"
pattern = r"\s" # 匹配空白字符
result = re.findall(pattern, text)
print(result) # 輸出: ['\t', '\n', ' ']
- \s匹配空格、制表符、換行符等
- \S匹配非空白字符
- 常用于分割字符串
案例6:驗證郵箱格式
組合使用字符集和量詞驗證郵箱格式。
emails = ["user@example.com", "invalid.email@com", "name@domain.co.uk"]
pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
for email in emails:
if re.match(pattern, email):
print(f"? 有效: {email}")
else:
print(f"? 無效: {email}")
- ^匹配字符串開頭
- $匹配字符串結尾
- +表示一個或多個
- {2,}表示至少2個字符
案例7:提取URL鏈接
匹配網頁中的URL鏈接。
html = '<a >主頁</a> <img src="image.png">'
pattern = r'href="(https?://[^"]+)"' # 提取href屬性中的URL
result = re.findall(pattern, html)
print(result) # 輸出: ['https://example.com']
- https?匹配"http"或"https"
- [^"]+匹配除"外的任意字符
- ()捕獲組提取特定部分
案例8:匹配日期格式
識別不同格式的日期。
dates = "2023-08-15, 15/08/2023, Aug 15 2023"
pattern = r"\d{4}-\d{2}-\d{2}|\d{2}/\d{2}/\d{4}|[A-Za-z]{3} \d{2} \d{4}"
result = re.findall(pattern, dates)
print(result) # 輸出: ['2023-08-15', '15/08/2023', 'Aug 15 2023']
- |表示"或"關系
- {4}精確匹配4個字符
- [A-Za-z]{3}匹配3個字母
案例9:提取電話號碼
提取不同格式的電話號碼。
text = "聯系:138-1234-5678 或 (021) 8765-4321"
pattern = r"\(?\d{2,4}\)?[- ]?\d{4}[- ]?\d{4}"
result = re.findall(pattern, text)
print(result) # 輸出: ['138-1234-5678', '(021) 8765-4321']
- \(?匹配0個或1個左括號
- \)?匹配0個或1個右括號
- [- ]?匹配可選的分隔符
案例10:替換敏感信息
使用正則表達式進行文本替換。
text = "Visa: 4111-1111-1111-1111, 電話:13800138000"
pattern_card = r"\d{4}-\d{4}-\d{4}-\d{4}"
pattern_phone = r"1[3-9]\d{9}"
# 替換敏感信息
result = re.sub(pattern_card, "[信用卡號已屏蔽]", text)
result = re.sub(pattern_phone, "[手機號已屏蔽]", result)
print(result)
# 輸出: Visa: [信用卡號已屏蔽], 電話:[手機號已屏蔽]
- re.sub()實現替換功能
- 1[3-9]\d{9}匹配中國大陸手機號
- 常用作數據脫敏處理
結語:掌握正則表達式的核心思維
通過這10個案例,你已經掌握了正則表達式的基礎用法:
- 模式思維:用抽象模式描述具體文本
- 組合思維:將簡單模式組合成復雜規則
- 實踐思維:在真實場景中不斷練習
進階建議:
- 使用regex101.com在線測試工具
- 學習貪婪/非貪婪匹配、零寬斷言等高級特性
- 結合Pandas處理結構化文本數據
正則表達式就像編程世界的超級放大鏡,讓你在文本的海洋中精準捕捉目標信息!
責任編輯:趙寧寧
來源:
Python數智工坊