正則表達式(Regular Expressions,簡稱 Regex)是一種用于匹配和操作文本的工具。通過正則表達式,用戶可以對字符串進行搜索、替換、分割等操作。在 Python 中,正則表達式的使用由 re 模塊提供支持。小編將介紹 Python 中正則表達式的基本使用方法及其常見操作。
1. 導入 re 模塊
在使用 Python 中的正則表達式之前,必須導入 re 模塊。re 模塊提供了處理正則表達式的各種功能。
pythonCopy Codeimport re
2. 正則表達式的基本語法
正則表達式由普通字符(如字母、數(shù)字)和特殊字符組成,特殊字符可以用來定義更復雜的匹配規(guī)則。常見的正則表達式語法包括:
.:匹配任何字符(除換行符外)
^:匹配字符串的開頭
$:匹配字符串的結(jié)尾
[]:匹配方括號內(nèi)的字符
|:表示邏輯“或”
*:匹配前一個字符零次或多次
+:匹配前一個字符一次或多次
?:匹配前一個字符零次或一次
{n}:匹配前一個字符正好 n 次
{n,}:匹配前一個字符至少 n 次
{n,m}:匹配前一個字符至少 n 次,至多 m 次
():用于分組
\d:匹配任何數(shù)字,等同于 [0-9]
\w:匹配字母、數(shù)字和下劃線,等同于 [a-zA-Z0-9_]
\s:匹配任何空白字符(如空格、換行符、制表符等)
3. 常見的 re 模塊函數(shù)
Python 中的 re 模塊提供了一些函數(shù)來進行正則表達式操作。以下是幾個常用的函數(shù):
3.1 re.match()
re.match() 從字符串的開始位置開始匹配,如果開頭匹配成功,則返回一個匹配對象。否則,返回 None。
pythonCopy Codeimport re
pattern = r"hello"
text = "hello world"
match = re.match(pattern, text)
if match:
print("匹配成功!")
else:
print("匹配失敗!")
輸出:
Copy Code匹配成功!
3.2 re.search()
re.search() 在整個字符串中搜索第一個匹配的結(jié)果。如果找到匹配項,則返回一個匹配對象,否則返回 None。
pythonCopy Codeimport re
pattern = r"world"
text = "hello world"
search = re.search(pattern, text)
if search:
print("匹配成功!")
else:
print("匹配失敗!")
輸出:
Copy Code匹配成功!
3.3 re.findall()
re.findall() 用于查找字符串中所有與正則表達式匹配的部分,并以列表的形式返回匹配的結(jié)果。
pythonCopy Codeimport re
pattern = r"\d+" # 匹配數(shù)字
text = "I have 2 apples and 5 bananas"
matches = re.findall(pattern, text)
print(matches)
輸出:
Copy Code['2', '5']
3.4 re.sub()
re.sub() 用于替換字符串中所有與正則表達式匹配的部分。它的第一個參數(shù)是正則表達式,第二個參數(shù)是替換的內(nèi)容,第三個參數(shù)是原始字符串。
pythonCopy Codeimport re
pattern = r"\d+" # 匹配數(shù)字
text = "I have 2 apples and 5 bananas"
result = re.sub(pattern, "X", text)
print(result)
輸出:
Copy CodeI have X apples and X bananas
3.5 re.split()
re.split() 根據(jù)正則表達式分割字符串,返回一個列表。它的第一個參數(shù)是正則表達式,第二個參數(shù)是要分割的字符串。
pythonCopy Codeimport re
pattern = r"\s+" # 匹配一個或多個空白字符
text = "I have 2 apples and 5 bananas"
result = re.split(pattern, text)
print(result)
輸出:
Copy Code['I', 'have', '2', 'apples', 'and', '5', 'bananas']
4. 正則表達式示例
4.1 匹配電子郵件地址
一個簡單的電子郵件地址的正則表達式可以如下:
pythonCopy Codeimport re
pattern = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"
email = "example@domain.com"
match = re.match(pattern, email)
if match:
print("有效的電子郵件地址")
else:
print("無效的電子郵件地址")
輸出:
Copy Code有效的電子郵件地址
4.2 匹配日期格式
假設(shè)我們需要匹配格式為 YYYY-MM-DD 的日期字符串,可以使用以下正則表達式:
pythonCopy Codeimport re
pattern = r"^\d{4}-\d{2}-\d{2}$"
date = "2025-03-19"
match = re.match(pattern, date)
if match:
print("匹配成功,日期格式正確")
else:
print("日期格式不正確")
輸出:
Copy Code匹配成功,日期格式正確
4.3 匹配電話號碼
假設(shè)我們要匹配一個簡單的電話號碼,格式為 (XXX) XXX-XXXX:
pythonCopy Codeimport re
pattern = r"^\(\d{3}\) \d{3}-\d{4}$"
phone_number = "(123) 456-7890"
match = re.match(pattern, phone_number)
if match:
print("有效的電話號碼")
else:
print("無效的電話號碼")
輸出:
Copy Code有效的電話號碼
5. 正則表達式的優(yōu)化和注意事項
貪婪與非貪婪匹配:正則表達式默認是貪婪的,即它會盡可能多地匹配字符。要實現(xiàn)非貪婪匹配,可以使用 ? 來修改行為。
示例:<.*?> 是一個非貪婪匹配,它會盡量少地匹配字符。
轉(zhuǎn)義字符:正則表達式中有許多特殊字符,如果你想匹配這些特殊字符本身,需要進行轉(zhuǎn)義。例如,. 是一個特殊字符,如果你想匹配實際的點(.),需要使用 \.。
性能優(yōu)化:復雜的正則表達式可能會影響程序性能,特別是在大文本中搜索時。使用簡潔有效的正則表達式有助于提高性能。
Python 中的正則表達式功能強大,可以用于文本匹配、查找、替換、分割等操作。通過 re 模塊,用戶可以高效地對字符串進行復雜的模式匹配操作。掌握正則表達式的基本語法和 Python 中 re 模塊的常見方法,可以讓你在文本處理、數(shù)據(jù)清理等方面變得更加得心應(yīng)手。