91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python查找第n個子串的技巧分享

發布時間:2020-09-28 15:20:44 來源:腳本之家 閱讀:346 作者:WarmSword 欄目:開發技術

Problem

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

Solution

采用嵌套的方法調用find或者index。

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

原理很簡單,第一次查找返回的位置加1作為第二次查找的起始參數。加1是因為start參數位置是被包含的,采用的閉區間的語義。也不用擔心會越界,python底層已經做了處理。

也可以寫一個單獨的函數來進行查找操作。

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個子串,從0開始。start為起始位置。此處使用find而不用index是因為index在查找失敗時會報出異常,而find不報異常返回-1。從健壯性考慮使用find。

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

Attention

1、左閉右開特性

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

默認的是左閉右開,即包含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是不會報出異常的,即查找子串失敗的情況下返回-1,而index在查找子串失敗時會報異常。

示例如下:

 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個子串的技巧分享就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

科技| 克什克腾旗| 呼玛县| 堆龙德庆县| 丰原市| 呼伦贝尔市| 故城县| 新绛县| 双城市| 文水县| 巴林左旗| 从江县| 巴南区| 拉孜县| 休宁县| 合川市| 双牌县| 唐山市| 阜宁县| 平江县| 临西县| 河津市| 疏附县| 阿瓦提县| 长治县| 灯塔市| 澳门| 仁怀市| 重庆市| 岳普湖县| 镇远县| 泌阳县| 东丽区| 柳州市| 遵义县| 尚志市| 六枝特区| 唐山市| 大余县| 宣化县| 咸丰县|