欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python查找第n個(gè)子串的技巧分享

 更新時(shí)間:2018年06月27日 10:25:45   作者:WarmSword  
今天小編就為大家分享一篇Python查找第n個(gè)子串的技巧心得,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

Problem

Python中str類自帶的find、index方法可以返回第一個(gè)匹配的子串的位置,但是如果實(shí)際使用中需要查找第2個(gè)甚至第n個(gè)子串的位置該怎么辦呢。也許有的碼友可能會(huì)用到第二第三個(gè)參數(shù),指定查找的起始、終止位置。但是在很多情況下,接收到的一個(gè)字符串可能是未知的,強(qiáng)制限定起始位置可能導(dǎo)致代碼在某些情況下不能適用。

Solution

采用嵌套的方法調(diào)用find或者index。

 str_exp = "aaabbbbccc"
 pos_n = str_exp.index("a", str_exp.index("a")+1)
 print(pos_n)

原理很簡(jiǎn)單,第一次查找返回的位置加1作為第二次查找的起始參數(shù)。加1是因?yàn)閟tart參數(shù)位置是被包含的,采用的閉區(qū)間的語義。也不用擔(dān)心會(huì)越界,python底層已經(jīng)做了處理。

也可以寫一個(gè)單獨(dú)的函數(shù)來進(jìn)行查找操作。

def find_n_sub_str(src, sub, pos, start):
 index = src.find(sub, start)
 if index != -1 and pos > 0:
  return find_n_sub_str(src, sub, pos - 1, index + 1)
 return index

pos表示第n個(gè)子串,從0開始。start為起始位置。此處使用find而不用index是因?yàn)閕ndex在查找失敗時(shí)會(huì)報(bào)出異常,而find不報(bào)異常返回-1。從健壯性考慮使用find。

看來遞歸使用起來還是可以解決很多編程實(shí)踐過程中遇到的工程問題。:)

Attention

1、左閉右開特性

str.index(self, sub, start=None, end=None)
str_tmp[start:end]

默認(rèn)的是左閉右開,即包含start的位置,卻不包含end的位置。在使用過程中需要注意一下。同樣左閉右開的還有切片操作str_tmp[start:end]。

示例如下:

 str_exp = "aaabbbbccc"
 print(str_exp)
 print(str_exp[str_exp.index("a"):str_exp.rindex("c")])
aaabbbbccc
aaabbbbcc

2、find與index差別

find是不會(huì)報(bào)出異常的,即查找子串失敗的情況下返回-1,而index在查找子串失敗時(shí)會(huì)報(bào)異常。

示例如下:

 str_tmp = "aaaabbbbccccdddd"
 print(find_n_sub_str(str_tmp, "a", 5, 0))
 print(str_tmp.find("a", 7))
 print(str_tmp.index("a", 7))
-1
-1
Traceback (most recent call last):
 File "/usr/local/pycharm-community-5.0.4/helpers/pydev/pydevd.py", line 2411, in <module>
 globals = debugger.run(setup['file'], None, None, is_module)
 File "/usr/local/pycharm-community-5.0.4/helpers/pydev/pydevd.py", line 1802, in run
 launch(file, globals, locals) # execute the script
 File "/usr/local/pycharm-community-5.0.4/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
 exec(compile(contents+"\n", file, 'exec'), glob, loc) 
 File "/usr/local/workspace/pycharmPro/StockAI/StockAI/DbDealer.py", line 140, in <module>
 print(str_tmp.index("a", 7))
ValueError: substring not found

以上這篇Python查找第n個(gè)子串的技巧分享就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python 基于 pygame 實(shí)現(xiàn)輪播圖動(dòng)畫效果

    Python 基于 pygame 實(shí)現(xiàn)輪播圖動(dòng)畫效果

    在Python中可以適應(yīng)第三方庫pygame來實(shí)現(xiàn)輪播圖動(dòng)畫的效果,使用pygame前需確保其已經(jīng)安裝,本文通過實(shí)例代碼介紹Python 基于 pygame 實(shí)現(xiàn)輪播圖動(dòng)畫效果,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Python Tkinter之事件處理詳解

    Python Tkinter之事件處理詳解

    事件處理,是 GUI 程序中不可或缺的重要組成部分,相比來說,控件只是組成一臺(tái)機(jī)器的零部件。本文我們將對(duì) Tkinter 中的事件處理機(jī)制做詳細(xì)的介紹,需要的可以參考一下
    2022-01-01
  • python如何將兩張圖片生成為全景圖片

    python如何將兩張圖片生成為全景圖片

    這篇文章主要為大家詳細(xì)介紹了python如何將兩張圖片生成為全景圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Python3對(duì)稱加密算法AES、DES3實(shí)例詳解

    Python3對(duì)稱加密算法AES、DES3實(shí)例詳解

    這篇文章主要介紹了Python3對(duì)稱加密算法AES、DES3,結(jié)合實(shí)例形式詳細(xì)分析了對(duì)稱加密算法AES、DES3相關(guān)模塊安裝、使用技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2018-12-12
  • Python如何轉(zhuǎn)換字符串大小寫

    Python如何轉(zhuǎn)換字符串大小寫

    在本篇文章里小編給大家整理的是關(guān)于Python轉(zhuǎn)換字符串大小寫代碼和實(shí)例,需要的朋友們可以參考下。
    2020-06-06
  • 使用Flink與Python進(jìn)行實(shí)時(shí)數(shù)據(jù)處理的基本步驟

    使用Flink與Python進(jìn)行實(shí)時(shí)數(shù)據(jù)處理的基本步驟

    Apache Flink是一個(gè)流處理框架,用于實(shí)時(shí)處理和分析數(shù)據(jù)流,PyFlink是Apache Flink的Python API,它允許用戶使用Python語言來編寫Flink作業(yè),進(jìn)行實(shí)時(shí)數(shù)據(jù)處理,以下是如何使用Flink與Python進(jìn)行實(shí)時(shí)數(shù)據(jù)處理的基本步驟,需要的朋友可以參考下
    2024-09-09
  • python爬蟲開發(fā)之Beautiful Soup模塊從安裝到詳細(xì)使用方法與實(shí)例

    python爬蟲開發(fā)之Beautiful Soup模塊從安裝到詳細(xì)使用方法與實(shí)例

    這篇文章主要介紹了python爬蟲開發(fā)之Beautiful Soup模塊詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下
    2020-03-03
  • 一文深入了解Python中的繼承知識(shí)點(diǎn)

    一文深入了解Python中的繼承知識(shí)點(diǎn)

    Python?是面向?qū)ο蟮木幊陶Z言,因此支持面向?qū)ο蟮娜筇匦灾唬豪^承。本文就帶大家了解了解Python中繼承的相關(guān)知識(shí)點(diǎn),感興趣的可以了解一下
    2022-11-11
  • Python命名空間與作用域深入全面詳解

    Python命名空間與作用域深入全面詳解

    命名空間是從名稱到對(duì)象的映射,大部分的命名空間都是通過 Python 字典來實(shí)現(xiàn)的,作用域就是一個(gè)可以直接訪問命名空間的正文區(qū)域。程序的變量并不是在哪個(gè)位置都可以訪問的,訪問權(quán)限決定于這個(gè)變量是在哪里賦值的
    2022-11-11
  • Python實(shí)現(xiàn)批量獲取當(dāng)前文件夾下的文件名

    Python實(shí)現(xiàn)批量獲取當(dāng)前文件夾下的文件名

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)批量獲取當(dāng)前文件夾下的文件名,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02

最新評(píng)論