python如何查找所有子串位置
python 查找所有子串位置
方法1
python 字符串中的find只能返回第一次出現(xiàn)的位置,可以利用find找出多有子串出現(xiàn)的位置:
def find_all(sub,s): ?? ?index_list = [] ?? ?index = s.find(sub) ?? ?while index != -1: ?? ??? ?index_list.append(index) ?? ??? ?index = s.find(sub,index+1) ?? ? ?? ?if len(index_list) > 0: ?? ??? ?return index_list ?? ?else: ?? ??? ?return -1
方法2
使用re包來(lái)實(shí)現(xiàn),直接通過(guò)循環(huán)來(lái)實(shí)現(xiàn),然后返回找到的pattern的起始位置和終止位置。
import re string = 'You said I was your life. Are you still alive when you lost it?' pattern = 'you' for m in re.finditer(pattern, string): ? ? print(m.start(), m.end())?
補(bǔ)充
1、str.find()函數(shù):檢測(cè) str 是否包含在 string 中,如果 beg 和 end 指定范圍,則檢查是否包含在指定范圍內(nèi),如果是返回開(kāi)始的索引值,否則返回-1。
str.find(substring, beg=0, end=len(string))
2、str.index()函數(shù):跟find()方法一樣,只不過(guò)如果str不在 string中會(huì)報(bào)一個(gè)異常。
str.index(substring, beg=0, end=len(string))
Python小知識(shí):查找子串問(wèn)題
查找子串
查找一個(gè)字符串中是否包含某個(gè)關(guān)鍵詞(查找子串問(wèn)題)是很常見(jiàn)的操作。比如:給定一句話s,查找s中是否包含關(guān)鍵詞王嘉爾。
今天來(lái)說(shuō)3個(gè)相關(guān)的方法,以及它們的區(qū)別和優(yōu)缺點(diǎn)。
in 操作符
如果只是為了判斷s中是否包含王嘉爾,最推薦的做法是用in或者not in操作符:
s = '王嘉爾小時(shí)候賣過(guò)豬'
print('王嘉爾' in s)
s2 = '王嘉爾小時(shí)候吃過(guò)豬'
print('王嘉爾' in s2)in操作符返回True或者False,而且運(yùn)行最快,是首選!
咱們加深一下,每一個(gè)Python的操作符背后都有一個(gè)魔法方法。當(dāng)我們使用in操作符的時(shí)候,它調(diào)用的是__contains__方法。
如果我們自己定義一個(gè)類,也要支持in和not in運(yùn)算符,只要實(shí)現(xiàn)__contains__方法就可以了。
find函數(shù)
s = '王嘉爾小時(shí)候賣過(guò)豬'
print(s.find('王嘉爾'))
print(s.find('王嘉爾') != -1)
s2 = '王嘉爾小時(shí)候吃過(guò)豬'
print(s2.find('王嘉爾'))
print(s2.find('王嘉爾') != -1)運(yùn)行結(jié)果:
0
True
-1
False
find函數(shù)返回子串的下標(biāo),如果找不到就返回-1。s中包含王嘉爾,返回下標(biāo)0。我們可以通過(guò)比較返回值和-1來(lái)確定是否包含子串。
index函數(shù)
index函數(shù)和find類似,也是返回子串在父串中的下標(biāo):
s = '王嘉爾小時(shí)候賣過(guò)豬'
print(s.index('王嘉爾'))
print(s.index('王嘉爾') != -1)運(yùn)行結(jié)果是:
0
True
但是index和find有個(gè)大的差別,如果父串中沒(méi)有包含子串,會(huì)報(bào)ValueError。
看下面的代碼:
s2 = '王嘉爾小時(shí)候吃過(guò)豬'
print(s2.index('王嘉爾'))運(yùn)行結(jié)果是:
ValueError: substring not found
看起來(lái)index比較弱,為什么它還有存在的價(jià)值呢?因?yàn)閕ndex是序列(sequence)的方法,在字符串,列表,元組中都可以用,而find是字符串特有的函數(shù)。
小結(jié)一下:如果只是看是否存在,直接用in操作符;如果還要找出下標(biāo),用find不會(huì)報(bào)錯(cuò),但是index可以應(yīng)用的范圍更廣。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)現(xiàn)0到1之間的隨機(jī)數(shù)方式
這篇文章主要介紹了python實(shí)現(xiàn)0到1之間的隨機(jī)數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
使用python創(chuàng)建圖片格式轉(zhuǎn)換器的實(shí)現(xiàn)步驟
本教程將指導(dǎo)如何使用 Python 編寫的圖片格式轉(zhuǎn)換工具 ImaCon_ter.py,該工具能夠?qū)D片從一種格式轉(zhuǎn)換為另一種格式,文章通過(guò)代碼示例講解的非常詳細(xì),感興趣的小伙伴跟著小編一起來(lái)看看吧2024-12-12
python3 實(shí)現(xiàn)的對(duì)象與json相互轉(zhuǎn)換操作示例
這篇文章主要介紹了python3 實(shí)現(xiàn)的對(duì)象與json相互轉(zhuǎn)換操作,結(jié)合實(shí)例形式分析了Python3使用json模塊針對(duì)json格式數(shù)據(jù)轉(zhuǎn)換操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-08-08
Jupyter notebook 輸出部分顯示不全的解決方案
這篇文章主要介紹了Jupyter notebook 輸出部分顯示不全的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
YOLOv5構(gòu)建安全帽檢測(cè)和識(shí)別系統(tǒng)使用詳解
這篇文章主要為大家介紹了YOLOv5構(gòu)建安全帽檢測(cè)和識(shí)別系統(tǒng)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
python re正則匹配網(wǎng)頁(yè)中圖片url地址的方法
今天小編就為大家分享一篇python re正則匹配網(wǎng)頁(yè)中圖片url地址的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
Python實(shí)現(xiàn)PPT幻燈片的添加、刪除或隱藏操作
PowerPoint文檔是商務(wù)、教育、創(chuàng)意等各領(lǐng)域常見(jiàn)的用于展示、教育和傳達(dá)信息的格式,在制作PPT演示文稿時(shí),靈活地操作幻燈片是提高演示效果、優(yōu)化內(nèi)容組織的關(guān)鍵步驟,本文給大家介紹了Python 操作PPT幻燈片- 添加、刪除、或隱藏幻燈片,需要的朋友可以參考下2024-08-08

