檢查 Python 字符串是否包含子字符串的 7 種方法

檢查 Python 字符串是否包含子字符串的 7 種方法

使用字符串是 Python 中的一項常見任務。您經常需要弄清楚一個字符串是否包含另一個字符串。

檢查 Python 字符串是否包含子字符串的最簡單方法包括“in”運算符、find() 函數和 index() 方法。可以使用正則表達式或 Pandas 等外部庫解決更複雜的場景。

本文向您展示:

  • 四種簡單的方法

  • 兩個更複雜的正則表達式函數

  • 一種使用 Pandas 庫的方法

您將通過語法和用法示例來學習每種技術。您還將獲得有關哪種方法最適合不同要求的提示。

讓我們開始吧!

目錄

Python 字符串基礎

Python 中的字符串是用於表示基於文本的數據的字符序列。它們可以包括字母、數字、符號和空格。

它是 Python 的內置數據類型之一,可以使用以下任一方式創建:

  • 單引號 (' ')

  • 雙引號 (” ”)

  • 三引號(”' ”' 或 “”” “”)

字符串是有索引的,這意味著您可以通過引用它們的索引號來訪問特定字符。起始索引為 0,這意味著字符串的第一個字符的索引為 0,第二個字符的索引為 1,依此類推。

接下來,我們看看檢查子字符串的方法。

檢查子字符串的 4 種最簡單方法

Python 提供了許多方法來檢查某個子字符串是否存在於較大的字符串中。有些比其他的更複雜。對於最基本的檢查,最簡單的方法是 in 運算符或三種字符串方法之一。

  1. 在運營商

  2. 查找() 方法

  3. index() 方法

  4. 計數() 方法

檢查 Python 字符串是否包含子字符串的 7 種方法

1.在運營商

Python 中的“in”運算符是檢查一個字符串是否存在於另一個字符串中的一種簡單直觀的方法。此運算符檢查成員資格並返回一個布爾值:

  • 如果在主字符串中找到子字符串,則為真

  • 如果不是則為假

這是一些示例代碼:

s = "Hello, world!"
sub = "world"
result = sub in s
print(result)  # Output: True

“in”運算符區分大小寫。這意味著它將小寫和大寫字符視為不同的。上面的代碼不會找到子字符串“hello”,所以運算符返回 false。

如果要執行不區分大小寫的檢查,可以在執行檢查之前將主字符串和子字符串都轉換為相同的大小寫:

s = "Hello, world!"
sub = "hello"
result = sub.lower() in s.lower()
print(result)  # Output: True

in 運算符的缺點是它不提供子字符串在主字符串中的位置。為此,您需要本節中的另一種方法。繼續閱讀……

2.查找()方法

find ()方法返回子字符串出現的第一個索引,如果未找到子字符串,則返回-1 。

您對字符串s調用find()方法,將子字符串sub作為參數傳遞。這是一個例子:

s = "Hello, world!"
sub = "world"
index = s.find(sub)

if index != -1:
     print("Found at index:", index)  # Output: Found at index: 7
else:
     print("Not found")

您可以選擇指定開始或結束索引來限制您的搜索。這種方法的缺點是它在第一次出現時停止。

3. Index() 方法

index ()方法與find()方法非常相似,不同之處在於它會在未找到子字符串時引發ValueError 。這意味著您應該將調用包裝在 Try/Except 部分中。

要使用index()方法,請在字符串s上調用它,並將子字符串sub作為參數傳遞。

s = "Hello, world!"
sub = "world"

try: 
     index = s.index(sub)
     print("Found at index:", index)  # Output: Found at index: 7
except ValueError:
     print("Not found")

此方法也會在文本中的第一個子字符串處停止。

4.Count() 方法

.count ()方法計算子字符串在原始字符串中出現的次數。它返回一個表示此計數的整數。如果在主字符串中找不到子字符串,則返回 0。

這是一個簡單的示例,它在文本“Hello, world!”中查找字母“o”:

s = "Hello, world!"
sub = "o"
print(s.count(sub))  # Output:2

用正則表達式匹配字符串的 2 種方法

使用正則表達式(regex) 比上一節中的方法稍微複雜一些。但是,它們為您提供了更多選項來搜索和分析您正在處理的文本。

re模塊中最簡單的兩種方法是:

  1. 搜索()

  2. 找到所有()

檢查 Python 字符串是否包含子字符串的 7 種方法

1.重新搜索()

re模塊中的search ()函數在給定字符串中搜索模式,如果找到匹配項,則返回匹配對象。否則,它返回None

默認情況下,函數區分大小寫。您可以使用re.IgnoreCase標誌來避免區分大小寫。

下面是一個簡單的示例,它根據是否找到字符串來使用條件語句:

import re
pattern = "python"
text = "I love Python programming"
match = re.search(pattern, text, re.IGNORECASE)

if match: 
     print("Pattern found")
else:
     print("Pattern not found")

請注意,此方法會找到第一個匹配項,然後停止搜索。如果您想找到所有匹配項,那麼此列表中的下一個適合您。

2.重新查找()

此方法查找給定字符串中所有出現的搜索模式,並返回包含所有匹配項的列表。

此示例使用匹配字符串中一個或多個數字的模式。文本字符串“123、456、789”包含三個數字序列。

import re 

pattern = "d+" 
text = "123, 456, 789" 
numbers = re.findall(pattern, text) 

print(numbers)

這是示例代碼的答案:['123', '456', '789']。

如何使用 Pandas 查找子字符串

檢查 Python 字符串是否包含子字符串的 7 種方法

Pandas 是一種流行的 Python 開源數據分析和操作庫。它提供了操作和分析結構化數據所需的數據結構和功能。

Pandas提供的主要數據結構之一是 DataFrame。您可以使用這種多功能的數據結構來檢查一個字符串是否包含在另一個字符串中。

Pandas 的優勢在於它提供了您必須用其他編程語言大量編寫的代碼。具體來說,contains 函數中包含了很多功能。

Pandas 中的 str.contains() 函數

str.contains ()方法測試指定模式或正則表達式是否包含在 DataFrame 列的字符串中。

下面是一個導入庫並在字符串列表中搜索字符串的示例:

import pandas as pd

# Creating a sample DataFrame 
data = {'fruits': ['apple', 'banana', 'cherry', 'watermelon', 'orange']} 
df = pd.DataFrame(data) 

# Searching for substrings in the 'fruits' column 
has_an = df['fruits'].str.contains(pat='an', regex=False)

# Filtering the DataFrame based on the search results 
filtered_df = df[has_an] 
print(filtered_df)

在此示例中,我們在“fruits”列中搜索子字符串“an”並相應地過濾 DataFrame。輸出將是:

  • 1根香蕉

  • 4 橙色

如果您正在尋找 Pandas 可以做什麼的更多示例,請觀看此視頻:

在 Python 中選擇特定方法的技巧

方法的選擇在很大程度上取決於您的任務的具體要求。

以下是選擇您從本文中學到的方法之一的四個理由,以及您將在本博客其他地方學習的一種獎勵方法:

  1. 加工速度

  2. 你需要知道子串的位置

  3. 您需要知道子串出現的次數

  4. 你想匹配複雜的模式

  5. 執行文本分析

1.處理速度

檢查 Python 字符串是否包含子字符串的 7 種方法

如果您只想知道字符串中是否存在子字符串,則 'in' 0perator 是最佳選擇。

為此,它簡單、直觀且快速。但是,它不提供有關子字符串的位置或計數的信息。

2. 子串的位置

如果您需要知道字符串中子字符串第一次出現的位置,請使用.find().index()方法。

它們都返回子字符串第一次出現的索引。

3. 子串計數

當您想知道一個子字符串在一個字符串中出現了多少次時,請使用.count()方法。

4.複雜的模式

如果您需要匹配複雜的模式或執行不區分大小寫的搜索,正則表達式是最靈活的。re.search ()函數可以處理簡單子字符串以外的模式,並且可以輕鬆執行不區分大小寫的搜索。

然而,正則表達式對於簡單的子字符串檢查來說可能有點過分,而且使用和維護起來也更慢、更複雜。

5. 進行文本分析

查看我們關於 Python 文本分析的文章,其中向您展示瞭如何使用 textblob 庫。

您可以使用.tags函數檢查詞性,或使用.ngram函數查找文檔中經常一起出現的詞。

最後的想法

您已經學習了七種檢查單詞或字符串對像是否包含在另一個對像中的方法。其中包括成員運算符、內置函數、正則表達式和 Pandas 函數。

每種方法都適用於某些情況,但並非適用於所有情況。在您掌握 Python 編程語言並為您的字符串分析任務使用最佳解決方案時,將本文用作備忘單。

請記住,沒有一種放之四海而皆準的方法。每種方法都有自己的好處和怪癖,因此請隨意選擇適合您的風格或您要解決的特定問題的方法。歸根結底,Python 就是為了讓您的生活更輕鬆,所以擁抱它的靈活性吧!


在 Power Automate 中執行直到循環控制

在 Power Automate 中執行直到循環控制

了解有關 Do Until 循環控制如何在 Power Automate 流中工作的基礎過程,並熟悉所需的變量。

使用 Deneb 為 LuckyTemplates 製作自定義視覺對象

使用 Deneb 為 LuckyTemplates 製作自定義視覺對象

受限於 LuckyTemplates 中提供的標準視覺效果?學習使用 Deneb 和 Vega-Lite 為 LuckyTemplates 創建自定義視覺對象,提升您的數據可視化能力。

在 Power Automate Desktop 中將日期添加到文件名

在 Power Automate Desktop 中將日期添加到文件名

在此博客中,您將了解如何使用 Power Automate Desktop 自動將日期添加到文件名的開頭或結尾。

Power Query:如何快速添加註釋

Power Query:如何快速添加註釋

找出幾種不同的方法在 Power Query 中添加註釋,這對於不喜歡記筆記的人非常有幫助。

Power Apps – SharePoint 集成指南

Power Apps – SharePoint 集成指南

在此博客中,您將了解 MS Power Apps 界面的基礎知識並了解 Power Apps-SharePoint 集成的過程。

什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

如何在 R 中保存和加載 RDS 文件

如何在 R 中保存和加載 RDS 文件

您將學習如何在 R 中保存和加載 .rds 文件中的對象。本博客還將介紹如何將對像從 R 導入 LuckyTemplates。

回顧前 N 個工作日——DAX 編碼語言解決方案

回顧前 N 個工作日——DAX 編碼語言解決方案

在此 DAX 編碼語言教程中,了解如何使用 GENERATE 函數以及如何動態更改度量標題。

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

本教程將介紹如何使用多線程動態可視化技術從報告中的動態數據可視化中創建見解。

LuckyTemplates 篩選上下文簡介

LuckyTemplates 篩選上下文簡介

在本文中,我將貫穿過濾器上下文。篩選上下文是任何 LuckyTemplates 用戶最初應該了解的主要主題之一。