python如何查找所有子串位置
python 查找所有子串位置
方法1
python 字符串中的find只能返回第一次出現的位置,可以利用find找出多有子串出現的位置:
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包來實現,直接通過循環(huá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())?
補充
1、str.find()函數:檢測 str 是否包含在 string 中,如果 beg 和 end 指定范圍,則檢查是否包含在指定范圍內,如果是返回開始的索引值,否則返回-1。
str.find(substring, beg=0, end=len(string))
2、str.index()函數:跟find()方法一樣,只不過如果str不在 string中會報一個異常。
str.index(substring, beg=0, end=len(string))
Python小知識:查找子串問題
查找子串
查找一個字符串中是否包含某個關鍵詞(查找子串問題)是很常見的操作。比如:給定一句話s,查找s中是否包含關鍵詞王嘉爾。
今天來說3個相關的方法,以及它們的區(qū)別和優(yōu)缺點。
in 操作符
如果只是為了判斷s中是否包含王嘉爾,最推薦的做法是用in或者not in操作符:
s = '王嘉爾小時候賣過豬' print('王嘉爾' in s) s2 = '王嘉爾小時候吃過豬' print('王嘉爾' in s2)
in操作符返回True或者False,而且運行最快,是首選!
咱們加深一下,每一個Python的操作符背后都有一個魔法方法。當我們使用in操作符的時候,它調用的是__contains__方法。
如果我們自己定義一個類,也要支持in和not in運算符,只要實現__contains__方法就可以了。
find函數
s = '王嘉爾小時候賣過豬' print(s.find('王嘉爾')) print(s.find('王嘉爾') != -1) s2 = '王嘉爾小時候吃過豬' print(s2.find('王嘉爾')) print(s2.find('王嘉爾') != -1)
運行結果:
0
True
-1
False
find函數返回子串的下標,如果找不到就返回-1。s中包含王嘉爾,返回下標0。我們可以通過比較返回值和-1來確定是否包含子串。
index函數
index函數和find類似,也是返回子串在父串中的下標:
s = '王嘉爾小時候賣過豬' print(s.index('王嘉爾')) print(s.index('王嘉爾') != -1)
運行結果是:
0
True
但是index和find有個大的差別,如果父串中沒有包含子串,會報ValueError。
看下面的代碼:
s2 = '王嘉爾小時候吃過豬' print(s2.index('王嘉爾'))
運行結果是:
ValueError: substring not found
看起來index比較弱,為什么它還有存在的價值呢?因為index是序列(sequence)的方法,在字符串,列表,元組中都可以用,而find是字符串特有的函數。
小結一下:如果只是看是否存在,直接用in操作符;如果還要找出下標,用find不會報錯,但是index可以應用的范圍更廣。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
python?中的?BeautifulSoup?網頁使用方法解析
這篇文章主要介紹了python?中的?BeautifulSoup?網頁使用方法解析,文章基于python的相關資料展開詳細內容介紹,具有一定的參考價值需要的小伙伴可以參考一下2022-04-04python 轉換 Javascript %u 字符串為python unicode的代碼
這篇文章主要介紹了python 轉換 Javascript %u 字符串為python unicode的代碼,需要的朋友可以參考下2016-09-09