Python 中的 search() 函式是什麼?


Python 作為一種程式語言,以其適應性和強大功能而聞名,它為開發人員提供了一系列廣泛的功能和方法來處理字串、模式搜尋以及各種與文字相關的操作。在這些函式中,'search()' 是 're'(正則表示式)模組的一個組成部分。本文將深入探討 Python 中 'search()' 函式的細節,提供分步說明和實際程式碼示例來解釋其用法。因此,使您能夠熟練地使用正則表示式在 Python 中進行文字搜尋操作。

理解正則表示式

在深入研究 'search()' 函式的細節之前,必須掌握正則表示式的本質。

正則表示式 - 正則表示式,通常縮寫為“regex”或“regexp”,是用於匹配和操作字串的強大工具。它們包含一系列字元,這些字元概述了搜尋模式。透過提供一種簡潔且通用的方法來搜尋文字資料中的複雜模式,它們成為驗證、資料提取和文字處理等任務的不可或缺的工具。

Python 中的 'search()' 函式

're' 模組中不可或缺的一部分,'search()' 函式能夠在給定字串中搜索指定的模式。

語法

re.search(pattern, string, flags=0)

引數

  • pattern - 要搜尋的正則表示式模式。

  • string - 要在其中查詢模式的輸入字串。

  • flags (可選) - 修改搜尋行為的其他標誌。

返回值

當在字串中發現模式時,'search()' 函式返回一個匹配物件;否則,它返回 None。

'search()' 的基本用法

為了演示 'search()' 函式的基本應用,讓我們考慮一個簡單的示例。我們的目標是在提供的字串中搜索單詞“apple”。

示例

  • 在這個例子中,我們匯入 're' 模組以利用正則表示式。輸入字串 'text' 包含短語“I have an apple and a banana.”。正則表示式模式 'r"apple"' 指定了我們在 'text' 中搜索確切單詞“apple”。

  • 隨後,我們使用模式和 'text' 作為引數呼叫 're.search()' 函式。當找到匹配項時,該函式返回一個匹配物件。相反,如果未找到模式,則該函式返回 None。

  • 最後,程式碼評估結果,如果發現匹配項,則列印“Pattern found!”,否則列印“Pattern not found.”。

import re

def basic_search_example():
   text = "I have an apple and a banana."
   pattern = r"apple"
   result = re.search(pattern, text)

   if result:
      print("Pattern found!")
   else:
      print("Pattern not found.")

# Example usage
basic_search_example()

輸出

Pattern found!

使用標誌忽略大小寫

'search()' 函式的顯著特徵之一是它可以透過使用標誌進行調整。在這些標誌中,'re.IGNORECASE' 突出顯示,它提供了進行不區分大小寫搜尋的能力。讓我們重新審視前面的示例,但這次,我們在搜尋單詞“apple”時將忽略大小寫。

示例

  • 在這種情況下,輸入字串 'text' 包含短語“I have an Apple and a banana.”。模式 'r"apple"' 保持不變,但這次,我們將 're.IGNORECASE' 標誌作為第三個引數包含在 're.search()' 函式中。

  • 're.IGNORECASE' 標誌指示 'search()' 函式執行不區分大小寫的搜尋,從而匹配輸入字串中的“apple”和“Apple”。

import re

def ignore_case_search_example():
   text = "I have an Apple and a banana."
   pattern = r"apple"
   result = re.search(pattern, text, re.IGNORECASE)

   if result:
      print("Pattern found!")
   else:
      print("Pattern not found.")

# Example usage
ignore_case_search_example()

輸出

Pattern found!

使用組提取子字串

正則表示式提供了透過組從匹配模式中提取子字串的額外優勢。使用括號 '()' 使我們能夠在模式中定義組。讓我們透過使用 'search()' 函式從電子郵件地址中提取域名來說明這一點。

示例

  • 在這個例子中,輸入字串 'email' 包含電子郵件地址“john.doe@example.com.”。正則表示式模式 'r"@(.+)$"' 有助於從電子郵件地址中提取域名。

  • '@' 符號匹配電子郵件地址中的“@”字元。

  • 括號 '()' 建立一個組,包含要捕獲的域名。

  • 模式的 '.+' 部分匹配電子郵件地址中一個或多個字元(不包括換行符)。

  • '$' 符號表示字串的結尾。

  • 一旦 're.search()' 函式發現匹配項,它就會返回一個匹配物件。隨後,我們使用匹配物件上的 'group(1)' 方法來提取第一個(也是唯一一個)組的內容,即域名。

import re

def extract_domain_example():
   email = "john.doe@example.com"
   pattern = r"@(.+)$"
   result = re.search(pattern, email)

   if result:
      domain = result.group(1)
      print(f"Domain: {domain}")
   else:
      print("Pattern not found.")

# Example usage
extract_domain_example()

輸出

Domain: example.com

查詢模式的多個出現

雖然 'search()' 函式在字串中發現模式的第一個出現,但在搜尋所有出現時可能會出現不足。為了解決這個問題,'re' 模組提供了 'findall()' 函式。讓我們識別給定文字中“apple”一詞的所有出現。

示例

  • 在這個例子中,輸入字串 'text' 包含短語“I have an apple, and she has an apple too.”。正則表示式模式 'r"apple"' 保持不變。

  • 透過利用 're.findall()' 函式以及模式和 'text' 作為引數,我們獲得一個包含文字中模式所有出現的列表。如果未找到匹配項,則返回空列表。

  • 程式碼檢查結果,如果檢測到出現,則打印出現列表。

import re

def find_all_occurrences_example():
   text = "I have an apple, and she has an apple too."
   pattern = r"apple"
   results = re.findall(pattern, text)

   if results:
      print(f"Occurrences of 'apple': {results}")
   else:
      print("Pattern not found.")

# Example usage
find_all_occurrences_example()

輸出

Occurrences of 'apple': ['apple', 'apple']

使用點元字元

正則表示式中的點 '.' 充當元字元,匹配除換行符之外的任何字元。我們可以利用點元字元在給定文字中查詢所有三個字母的單詞。

示例

  • 在這個例子中,輸入字串 'text' 包含短語“The cat ran on the mat.”。正則表示式模式 'r"\b...\b"' 用於識別文字中所有三個字母的單詞。

  • '\b' 表示單詞邊界,保證匹配項中包含完整的單詞。

  • '...' 匹配文字中的任何三個字元(字母)。

  • 使用 're.findall()' 函式後,我們檢索到一個包含文字中所有三個字母的單詞的列表。如果未找到匹配項,則返回空列表。

  • 程式碼驗證結果,如果發現三個字母的單詞,則列印單詞列表。

import re

def dot_metacharacter_example():
   text = "The cat ran on the mat."
   pattern = r"\b...\b"
   results = re.findall(pattern, text)

   if results:
      print(f"Three-letter words: {results}")
   else:
      print("Pattern not found.")

# Example usage
dot_metacharacter_example()

輸出

Three-letter words: ['The', 'cat', 'ran', ' on', 'the', 'mat']

總之,Python 的 're' 模組中的 'search()' 函式是使用正則表示式搜尋模式的強大工具。其功能包括定位和提取子字串、執行不區分大小寫的搜尋以及識別字符串中模式的多個出現。正則表示式提供了一種適應性和通用性強的文字處理方法,在資料驗證、解析和文字提取等任務中證明了其巨大的價值。

隨著您在正則表示式探索中的進步,我鼓勵您參與實踐和實驗各種模式,從而改進您使用 Python 進行文字操作的技能。無論您是進行簡單的單詞搜尋還是進行復雜的資料提取工作,'search()' 函式和正則表示式無疑將成為您 Python 程式設計庫中不可或缺的工具。

更新於: 2023年8月22日

15K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.