正則表達式(Regular Expression),簡稱Regex或RegExp,是一種用來匹配字符串的強大工具。Python內置的re模塊可以讓我們輕鬆使用正則表達式對字符串進行檢索、替換、分割等操作,這為文本處理提供了很大的便利。
一、基礎語法
正則表達式是由普通字符和一些特殊字符組成的,可以用來描述字符的特徵、數量、出現次序等。下面是一些基礎的正則表達式。
. 匹配任意字符,不包括換行符
\w 匹配字母、數字或下劃線
\s 匹配任意空白字符,包括空格、製表符、換頁符等
\d 匹配數字
^ 匹配字符串的開始
$ 匹配字符串的結束
[] 匹配中括號中的任意一個字符
| 匹配 | 左右兩側的任意一個正則表達式
() 分組,可以對一部分正則表達式進行操作
* 匹配前面的表達式0次或多次
+ 匹配前面的表達式1次或多次
? 匹配前面的表達式0次或1次
{n} 匹配前面的表達式n次
{n,} 匹配前面的表達式至少n次
{n,m} 匹配前面的表達式n次到m次
例如,我們使用正則表達式 \d{3}-\d{5} 來匹配郵政編碼,其中 \d 表示匹配數字,{3}表示匹配3次,-表示匹配橫杆。這裡的正則表達式的意思是先匹配3個數字,再匹配一個橫杆,然後再匹配5個數字。
二、常用操作
re模塊提供了很多常用的操作函數,這裡介紹3個最常用的操作:search、match和sub。
1. search
search函數用來檢索字符串中是否有符合正則表達式的內容,如果查找成功,返回一個Match對象,否則返回None。
import re
# 查找郵箱地址
text = "我的郵箱是lichang@mail.com。"
pattern = r'\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}'
result = re.search(pattern, text)
if result:
print(result.group()) # 輸出lichang@mail.com
else:
print("未找到郵箱地址。")
2. match
match函數用來判斷字符串開頭是否符合正則表達式,如果符合,返回一個Match對象,否則返回None。
import re
# 檢查手機號碼
text = "我的手機號碼是18012345678。"
pattern = r'^1\d{10}$'
result = re.match(pattern, text)
if result:
print(result.group()) # 輸出18012345678
else:
print("未找到手機號碼。")
3. sub
sub函數用來替換字符串中符合正則表達式的內容。
import re # 替換字符串 text = "I love Python!" pattern = r'\bPython\b' result = re.sub(pattern, "Java", text) print(result) # 輸出I love Java!
三、高級應用
正則表達式還有很多高級應用,這裡介紹3個最常見的:分組、零寬斷言和貪婪與非貪婪匹配。
1. 分組
正則表達式使用 () 來進行分組,可以對分組內容進行重複或者替換。
import re
# 替換文字
text = "2019年10月10日"
pattern = r'(\d{4})年(\d{2})月(\d{2})日'
result = re.sub(pattern, r'\1-\2-\3', text)
print(result) # 輸出2019-10-10
2. 零寬斷言
零寬斷言指的是匹配內容的前面或者後面應該滿足一定的條件,但是這些條件不包括在匹配結果中。
import re
# 查找http鏈接
text = "我的個人網站是http://www.lichang.net,歡迎來訪問。"
pattern = r'(?<=http://)[a-zA-Z0-9]+\.[a-zA-Z]+'
result = re.search(pattern, text)
if result:
print(result.group()) # 輸出www.lichang.net
else:
print("未找到鏈接。")
3. 貪婪與非貪婪匹配
正則表達式默認是貪婪模式,即儘可能多地匹配內容。非貪婪模式使用 ? 來標識,表示儘可能少地匹配內容。
import re # 正則表達式在匹配字符串時儘可能多地匹配內容 text = "Title
" pattern = r'' result = re.match(pattern, text) print(result.group()) # 輸出Title
# 正則表達式在匹配字符串時儘可能少地匹配內容 text = "Title
" pattern = r'' result = re.match(pattern, text) print(result.group()) # 輸出
四、總結
正則表達式是一種強大的文本處理工具,能夠為Python程序員提供很大的便利。Python內置的re模塊可以讓我們輕鬆使用正則表達式對字符串進行檢索、替換、分割等操作。雖然正則表達式也有一些坑,但是只要我們理解了基本語法和常用操作,就可以快速地解決很多文本處理問題。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/246405.html
微信掃一掃
支付寶掃一掃