」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在Python中尋找字串中子字串的第n次出現?

如何在Python中尋找字串中子字串的第n次出現?

發佈於2024-11-06
瀏覽:168

How to Find the nth Occurrence of a Substring in a String in Python?

查找字串中某個子字串第n 次出現

識別某個子字串第n 次出現對應的索引為各種程式場景中經常出現的任務。在Python中,沒有專門為此目的而設計的內建函數。但是,可以採用多種方法來實現此結果。

一種簡單的方法是使用循環來迭代字串併計算子字串的出現次數。起始索引被初始化為第一次出現的結果,循環繼續直到找到第n次出現。

def find_nth_occurrence(haystack, needle, n):
    index = haystack.find(needle)
    while index >= 0 and n > 1:
        index = haystack.find(needle, index   len(needle))
        n -= 1
    return index

這種方法高效且易於理解,但需要多次遍歷字串,對於大字串來說可能很耗時。

另一種更Pythonic的方法是使用正規表示式。正規表示式提供了一種強大而簡潔的方式來搜尋和操作字串。以下函數使用 re.findall() 方法來尋找所有出現的子字串,然後擷取第 n 個索引:

import re

def find_nth_occurrence_regex(haystack, needle, n):
    occurrences = re.findall(needle, haystack)
    if len(occurrences) >= n:
        return haystack.index(occurrences[n - 1])
    else:
        return -1

此方法比大字串的迭代方法更快,但它需要導入額外的模組(re)。此外,對於某些用戶來說,它可能比迭代方法的可讀性差。

迭代方法和正規表示式方法之間的選擇最終取決於手頭任務的特定要求。對於小字串,迭代方法可能就足夠了,而對於大字串,正規表示式方法可能會提供更好的效能。

版本聲明 本文轉載於:1729380497如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • 馴服電子郵件野獸:我的收件匣管理人工智慧之旅
    馴服電子郵件野獸:我的收件匣管理人工智慧之旅
    是否曾经感觉您的收件箱是一个数字九头蛇,为您回复的每个人发送两封新电子邮件? ??好吧,科技爱好者们,我决定用秘密武器来对付这个怪物:人工智能! ??️ 尤里卡时刻 想象一下:现在是凌晨 3 点,我周围都是空咖啡杯☕☕☕,盯着一个数量可与国会图书馆相媲美的收件箱。就在那时,我突然想到...
    程式設計 發佈於2024-11-06
  • 為什麼 Go 是智能合約開發的新競爭者
    為什麼 Go 是智能合約開發的新競爭者
    区块链生态系统迅速发展,引入了创新的解决方案和平台,扩展了分布式账本技术的潜力。这项创新的核心是智能合约——自动执行的程序,无需中介即可自动执行协议。传统上,Solidity 一直是编写智能合约的首选语言,尤其是以太坊区块链。 Solidity 旨在在以太坊虚拟机 (EVM) 中运行,为开发人员提供...
    程式設計 發佈於2024-11-06
  • 如何在等待執行緒完成時保持 tkinter GUI 回應?
    如何在等待執行緒完成時保持 tkinter GUI 回應?
    等待線程完成時凍結/掛起tkinter GUI在Python 中使用tkinter GUI 工具包時遇到的常見問題執行某些操作時介面凍結或掛起。這通常是由於在主事件循環中使用了阻塞操作,例如加入執行緒。 瞭解 tkinter Mainlooptkinter mainloop() 是負責處理使用者輸入...
    程式設計 發佈於2024-11-06
  • C 和 C++ 中條件運算子的行為有什麼不同?
    C 和 C++ 中條件運算子的行為有什麼不同?
    條件運算子:剖析C 與C 的差異在程式設計領域,條件運算子(?:) 充當計算表達式並根據結果傳回特定值的簡潔方法。雖然此運算符在 C 和 C 中的操作類似,但出現了一個微妙的區別,可能會影響程式碼執行。 C:對左值的限制在 C 中,條件運算子會對傳回左值(駐留在特定記憶體位址的變數)施加限制。這表示...
    程式設計 發佈於2024-11-06
  • Java中如何有效率地檢查字串中是否存在某個字元?
    Java中如何有效率地檢查字串中是否存在某個字元?
    高效字串字元驗證在Java中,一個常見的任務是判斷某個特定字元是否出現在字串中。雖然傳統方法涉及遍歷字串,但利用 indexOf() 的有效替代方法消除了循環的需要。 IndexOf() 逐個字元掃描字串,並傳回指定字元所在的第一個實例的索引出現。如果該字元不存在,則傳回值 -1。 考慮檢查字元「a...
    程式設計 發佈於2024-11-06
  • 如何使用 PHP 為圖片添加浮水印?
    如何使用 PHP 為圖片添加浮水印?
    使用PHP 向圖像添加浮水印如果您正在使用允許用戶上傳圖像的網站,則可能需要添加這些圖像的浮水印,以防止未經授權的使用。添加浮水印可確保您的徽標或品牌在每個上傳的圖像上都可見。以下是如何在PHP 中實現此目的:使用PHP 函數PHP 手冊提供了使用以下函數的綜合範例:imagecreatefromp...
    程式設計 發佈於2024-11-06
  • 如何抑制 Tensorflow 調試輸出?
    如何抑制 Tensorflow 調試輸出?
    抑制Tensorflow調試信息Tensorflow可能會在初始化時在終端中顯示調試信息,包括加載的庫和發現的設備。雖然此資訊對於偵錯目的很有用,但它也會使控制台混亂並使追蹤重要訊息變得困難。 要停用此偵錯訊息,您可以使用 os.environ 模組:import os os.environ['TF...
    程式設計 發佈於2024-11-06
  • 如何確定我的 MySQL 查詢是否利用了索引?
    如何確定我的 MySQL 查詢是否利用了索引?
    識別 MySQL 索引的效能優化 MySQL 查詢時,評估索引的有效性至關重要。 取得索引效能指標要確定您的查詢是否使用索引,請執行下列查詢:EXPLAIN EXTENDED SELECT col1, col2, col3, COUNT(1) FROM table_name WHERE col1...
    程式設計 發佈於2024-11-06
  • 如何更改 WAMP/MySQL 中錯誤訊息的語言?
    如何更改 WAMP/MySQL 中錯誤訊息的語言?
    WAMP/MySQL 中的語言錯誤WAMP/MySQL 中的語言錯誤許多用戶都遇到WAMP/MySQL 中的錯誤未以正確的語言顯示的問題。多次重新安裝WAMP並蒐索大量資源後,該問題仍然存在。 要解決此問題,需要修改my.ini檔案。 修改my.ini檔案# Change your locale h...
    程式設計 發佈於2024-11-06
  • Item - 傳回空集合或陣列而不是 null
    Item - 傳回空集合或陣列而不是 null
    不回傳 null: 傳回 null 取代空集合或陣列的方法需要額外的客戶端處理以避免異常。 null 問題: 客戶端需要新增冗餘檢查(如果要檢查null)。 這些檢查中的遺漏可能會被忽視,從而導致錯誤。 傳回集合或陣列的方法很難實現。 反對 null 的參數: 不要擔心分配空集合或陣列的效...
    程式設計 發佈於2024-11-06
  • 節點 JS || Epress js ||作者:穆尼塞卡·烏達瓦拉帕蒂
    節點 JS || Epress js ||作者:穆尼塞卡·烏達瓦拉帕蒂
    Express js 編寫簡單的express js應用程式 npm 初始化 npm 安裝 Express const express=require('expreass'); const app=express(); app.use('/',(req,res,next)=>{ rse...
    程式設計 發佈於2024-11-06
  • 嵌套括號可以在沒有遞歸或平衡組的情況下匹配嗎?
    嵌套括號可以在沒有遞歸或平衡組的情況下匹配嗎?
    在沒有遞歸或平衡組的情況下匹配嵌套括號使用正則表達式匹配嵌套括號可能具有挑戰性,特別是在像Java 這樣的語言中,其中遞歸且不支援平衡組。幸運的是,使用前向引用確實可以克服此限制。 匹配外部組以下正則表達式[1] 匹配外部組括號而不對深度施加限制:(?=\()(?:(?=.*?\((?!.*?\1)...
    程式設計 發佈於2024-11-06
  • 使用 TDD 方法論和 PostgreSQL 使用 Django 建立完整部落格應用程式的指南(部分安全使用者身份驗證)
    使用 TDD 方法論和 PostgreSQL 使用 Django 建立完整部落格應用程式的指南(部分安全使用者身份驗證)
    Welcome back, everyone! In the previous part, we established a secure user registration process for our Django blog application. However, after succes...
    程式設計 發佈於2024-11-06
  • 如何寫出更好的 CSS
    如何寫出更好的 CSS
    為了為網站樣式編寫更好的CSS,您必須先學習三件事,即響應式設計,您的程式碼可維護和可擴展,並且具有執行性。 響應式設計就是確保您的網站在每種可能的螢幕尺寸上都具有完美的外觀和行為。隨著螢幕尺寸的不斷增加,響應式設計是每個前端開發人員必須學習和掌握的基本概念。 您編寫的程式碼必須以其他開發人員也...
    程式設計 發佈於2024-11-06
  • 解鎖 JavaScript 的超能力:變數的魔力
    解鎖 JavaScript 的超能力:變數的魔力
    從今天開始,我們將發現一個編程的世界。 你擁有超能力的世界。是的,你沒看錯,超能力。如果不是超能力,那又是什麼?使用 JavaScript,您可以讓物體飛行、移動、消失、改變顏色,並在數英里之外看到您的朋友,而這只是可能的一小部分。是的,一切都在你的螢幕上,但仍然非常令人興奮。 像任何超級英雄一樣...
    程式設計 發佈於2024-11-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3