如何在 Python 的正則表示式中匹配開頭和結尾?


您是否曾經遇到過需要確定 Python 中字串是否以特定模式開頭或結尾的情況?如果是這樣,您無需擔心,因為 Python 的正則表示式在這種情況下了提供瞭解決方案。藉助正則表示式的強大功能,您可以輕鬆檢查字串是否以特定的字元序列開頭或結尾。在這篇綜合文章中,我們將探討各種程式碼示例,這些示例演示瞭如何輕鬆地使用 Python 的正則表示式來完成此任務。

在深入探討示例之前,讓我們先停下來了解一下正則表示式是什麼以及它們如何在 Python 中工作。正則表示式是一種功能強大且靈活的工具,用於在文字中搜索模式。它們允許您使用特殊字元和序列定義規則,以匹配和操作較長文字字串中的子字串。

現在,讓我們深入探討使用正則表示式匹配字串開頭的方法。假設您有一個名稱列表,並且您想查詢所有以“J”開頭的名稱。Python 的正則表示式可以輕鬆幫助您實現此目標。讓我們檢視一個示例

示例

在此程式碼示例中,我們匯入了 `re` 模組,該模組為我們提供了正則表示式功能。`names` 列表包含多個名稱,我們使用列表推導式來遍歷每個名稱。在推導式內部,`re.match(r'^J', name)` 使用 `^` 符號檢查名稱是否以字母“J”開頭,該符號表示字串的開頭。如果條件為真,則將名稱追加到 `matching_names` 列表中。最後,我們列印匹配名稱的列表。

import re

names = ["John", "Jane", "David", "Michael", "Jessica"]
matching_names = [name for name in names if re.match(r'^J', name)]
print(matching_names)

輸出

['John', 'Jane', 'Jessica']

現在,讓我們轉向並探討使用正則表示式匹配字串結尾的方法。考慮這樣一種情況,您有一個檔名列表,並且您想查詢所有副檔名為“.txt”的檔案。Python 的正則表示式再次可以為您提供幫助。讓我們看一下程式碼

示例

在此示例中,我們使用 `re.search(r'\.txt$', file_name)` 方法查詢以“.txt”結尾的檔名。句點(`.`)之前的 `\` 是跳脫字元,確保句點被視為字面字元,而不是特殊的正則表示式字元。`$` 符號表示字串的結尾。滿足條件時,檔名將新增到 `txt_files` 列表中,然後我們列印該列表以檢視輸出。

import re
file_names = ["document.txt", "photo.jpg", "notes.txt", "report.docx", "data.csv"]
txt_files = [file_name for file_name in file_names if re.search(r'\.txt$', file_name)]
print(txt_files)

輸出

['document.txt', 'notes.txt']

但是,如果您想同時匹配字串的開頭和結尾怎麼辦?Python 的正則表示式也為此提供瞭解決方案。讓我們舉一個需要查詢所有以字母“A”開頭和結尾的名稱的示例

示例

在此程式碼片段中,我們使用 `re.search(r'^A.*A$', name)` 方法。`^A` 檢查名稱是否以字母“A”開頭,`A$` 檢查名稱是否以字母“A”結尾。`.*` 在開頭和結尾字元之間匹配任意數量的字元(包括無),從而在字串中間提供靈活性。

import re

names = ["Alan", "Michael", "Anna", "Alicia", "Robert"]
matching_names = [name for name in names if re.search(r'^A.*A$', name)]
print(matching_names)

輸出

[]

讓我們繼續另一個示例,該示例展示瞭如何使用正則表示式查詢句子中所有以字母“t”開頭和結尾的單詞

示例

在此程式碼中,我們使用 `re.findall(r'\bt[a−z]*t\b', sentence, re.IGNORECASE)` 函式查詢以“t”開頭和以“t”結尾的單詞。`\b` 表示單詞邊界,確保我們匹配整個單詞。`[a−z]*` 允許“t”字元之間出現零個或多個任何小寫字母,使用 `re.IGNORECASE` 標誌使其不區分大小寫。

import re

sentence = "The tiger chased the cat in the dark forest."
matching_words = re.findall(r'\bt[a-z]*t\b', sentence, re.IGNORECASE)
print(matching_words)

輸出

[]

最後,讓我們探討一個示例,其中我們希望從以特定關鍵字開頭的文字中提取所有行。考慮這樣一種情況,您有一個日誌檔案,並且您想檢索所有以“ERROR”開頭的行

示例

在此程式碼片段中,我們使用 `re.findall(r'^ERROR: .+', log_text, re.MULTILINE)` 方法。`^ERROR: ` 確保我們匹配以“ERROR: ”開頭的行。`.+` 匹配關鍵字後一個或多個任何字元,捕獲整行。

import re

log_text = """
ERROR: File not found.
DEBUG: Function executed successfully.
ERROR: Invalid input detected.
WARNING: Memory usage high.
"""
error_lines = re.findall(r'^ERROR: .+', log_text, re.MULTILINE)
print(error_lines)

輸出

['ERROR: File not found.', 'ERROR: Invalid input detected.']

總之,Python 的正則表示式功能為匹配字串的開頭和結尾提供了強大而通用的解決方案。透過使用本指南中提供的示例和說明,您可以自信地使用正則表示式來處理 Python 程式碼中的各種字串操作任務。無論您需要查詢以特定字母開頭的名稱,還是根據關鍵字從日誌檔案中提取行,正則表示式都能滿足您的需求。您必須擁抱正則表示式的強大功能,並釋放 Python 程式設計之旅的全部潛能!

更新於: 2023-09-08

1K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告