re
模組基本介紹
re
模組是 Python 用來處理正則表達式的標準模組。
正則表達式是一種用於描述字串模式的語法,可以用來匹配、搜尋、分割和替換字串中的特定模式。
常用函式
這些函式涵蓋了re
模組中的大部分功能,可以滿足日常的文本處理需求。1. re.match()
match = re.match(pattern, string)
- 功能:嘗試從字串的起始位置匹配模式。如果匹配成功,則返回一個
Match
物件;否則返回None
。 - 用途:用於檢查字串是否以某個模式開頭。
簡單範例
re.match()
嘗試從字串的起始位置匹配模式,這裡檢查text
是否以 "Hello" 開頭。
import re
text = "Hello, world!"
pattern = r'^Hello'
# 檢查字串是否以 "Hello" 開頭
match = re.match(pattern, text)
if match:
print("The string starts with 'Hello'")
else:
print("No match")
# 輸出
# The string starts with 'Hello'
2. re.search()
search = re.search(pattern, string)
- 功能:在整個字串中搜尋模式。如果找到匹配,則返回一個
Match
物件;否則返回None
。 - 用途:用於在字串的任意位置搜尋第一次匹配。
簡單範例
re.search()
在字串中搜尋第一次出現的 "hello"。
import re
text = "Say hello to the world"
pattern = r'hello'
# 在字串中搜尋 "hello"
search = re.search(pattern, text)
if search:
print(f"Found '{search.group()}' in the text!")
else:
print("No match")
# 輸出
# Found 'hello' in the text!
3. re.findall()
matches = re.findall(pattern, string)
- 功能:搜尋字串中所有與模式匹配的字串,並以列表的形式返回這些匹配。
- 用途:用於提取字串中所有符合模式的部分。
簡單範例
re.findall()
返回字串中所有匹配的數字
import re
text = "My numbers are 123, 456, and 789."
pattern = r'\d+'
# 提取字串中的所有數字
numbers = re.findall(pattern, text)
print(numbers) # 輸出: ['123', '456', '789']
4. re.finditer()
matches = re.finditer(pattern, string)
- 功能:返回一個可迭代物件,裡面包含所有與模式匹配的子串的
Match
物件。 - 用途:與
findall()
類似,但返回Match
物件,這樣你可以取得更多的匹配資訊。
簡單範例
re.finditer()
返回一個可迭代物件,包含每個匹配的詳細資訊。
import re
text = "My numbers are 123, 456, and 789."
pattern = r'\d+'
# 找到所有數字並逐一打印
matches = re.finditer(pattern, text)
for match in matches:
print(f"Found {match.group()} at position {match.span()}")
#輸出
'''
Found 123 at position (15, 18)
Found 456 at position (20, 23)
Found 789 at position (29, 32)
'''
5. re.split()
parts = re.split(pattern, string)
- 功能:根據模式分割字串,並以列表形式返回分割後的結果。
- 用途:用於根據匹配模式來分割字串。
簡單範例
re.split()
根據指定模式分割字串,這裡使用 ,
、;
和 |
作為分隔符。
import re
text = "apple, banana; orange|grape"
pattern = r'[;,|]'
# 根據逗號、分號或豎線來分割字串
fruits = re.split(pattern, text)
print(fruits) # 輸出: ['apple', ' banana', ' orange', 'grape']
6. re.sub()
result = re.sub(pattern, repl, string)
- 功能:使用
repl
替換字串中所有與模式匹配的部分,並返回替換後的字串。 - 用途:用於進行模式替換操作。
簡單範例
re.sub()
替換字串中所有與模式匹配的部分。
import re
text = "The price is 100 dollars"
pattern = r'\d+'
# 替換字串中的數字為 "###"
new_text = re.sub(pattern, '###', text)
print(new_text) # 輸出: "The price is ### dollars"
7. re.subn()
result, num_subs = re.subn(pattern, repl, string)
- 功能:與
re.sub()
類似,但返回一個包含兩個元素的元組:替換後的字串和替換的次數。 - 用途:用於需要知道替換次數的情況。
簡單範例
re.subn()
替換字串中的模式並返回替換後的字串及替換次數。
import re
text = "There are 2 cats and 3 dogs."
pattern = r'\d+'
# 替換字串中的數字為 "###" 並返回替換次數
new_text, num_subs = re.subn(pattern, '###', text)
print(new_text) # 輸出: "There are ### cats and ### dogs."
print(num_subs) # 輸出: 2
8. re.compile()
compiled_pattern = re.compile(pattern)
- 功能:將正則表達式編譯成一個正則表達式物件,這個物件可以重複使用以進行匹配操作。
- 用途:在需要多次使用同一模式時,預先編譯模式以提高性能。
簡單範例
re.compile()
編譯正則表達式以便重複使用。
import re
pattern = re.compile(r'\d+')
text = "My number is 12345."
# 使用編譯好的正則表達式匹配數字
match = pattern.search(text)
if match:
print(f"Found number: {match.group()}") # 輸出: "Found number: 12345"
Match
物件
Match
物件是 re.match()
、re.search()
、re.finditer()
等函式返回的結果,當有匹配時,它包含了匹配的詳細資訊。
常用屬性和方法:
group()
:返回匹配的字串或特定的群組。start()
:返回匹配的起始位置。end()
:返回匹配的結束位置。span()
:返回匹配的起始和結束位置作為一個元組。