1、測試1
>>> seq = 'ATGTGACCCTGATTTTGAATGatgAtgAtGaTGaTg' ## 定義測試字符串 >>> type(seq) <class 'str'>=
使用find查找:
>>> seq.find('ATG') ## 返回查找字符串的第一個索引 0 >>> seq.find('GTG') ## 同上 2 >>> seq.find('XTG') ## 當沒有匹配的字符串時, 返回-1 -1 >>>
2、當有多個匹配的字符串時,返回每一個字符串的索引
>>> seq = 'ATGTGACCCTGATTTTGAATGatgAtgAtGaTGaTg' ## 定義一個測試字符串 >>> seq 'ATGTGACCCTGATTTTGAATGatgAtgAtGaTGaTg' >>> type(seq) <class 'str'> >>> def find_all(string, sub): ## 定義查找函數, 兩個參數,一個是總字符串, 一個是要查找的字符串 start = 0 ## 定義查找的起始位置 pos = [] ## 定義空列表 while True: ## 設置循環條件 start = string.find(sub, start) ## 根據查找結果調整查找的起始位置 if start == -1: ## 設置循環終止條件,即沒有匹配字符串時, 循環終止 return pos ## 返回所有的查找結果 pos.append(start) ## 將每次查找到的字符串的起始索引添加至pos列表 start += len(sub) ## 當查找到字符時, 查找起始位置向后移動被字符串長度個單位 >>> find_all(seq, 'XXX') ## 未匹配字符串情況 [] >>> find_all(seq, 'ATG') ## 一共查找到兩個字符串, 索引分別為0, 18 [0, 18]
3、使用re庫函數查找
>>> seq = 'ATGTGACCCTGATTTTGAATGatgAtgAtGaTGaTg' ## 測試字符串 >>> seq 'ATGTGACCCTGATTTTGAATGatgAtgAtGaTGaTg' >>> type(seq) <class 'str'> >>> import re ## 導入re庫函數 >>> re.findall('ATG', seq) ## 直接返回字符串列表 ['ATG', 'ATG'] >>> [pos.start() for pos in re.finditer('ATG',seq)] ## 返回字符串索引 [0, 18] >>> re.findall('ATG', seq, flags=re.IGNORECASE) ## flags = re.IGNORECASE, 忽略大小寫 ['ATG', 'ATG', 'atg', 'Atg', 'AtG', 'aTG', 'aTg'] >>> [pos.start() for pos in re.finditer('ATG',seq, flags = re.IGNORECASE)] [0, 18, 21, 24, 27, 30, 33]
來源:https://mp.weixin.qq.com/s?__biz=MzkyMTI1MTYxNA==&mid=2247496936&idx=1&sn=63eb0ed21f13af872ea7021b6b8b5b06&chksm=c184ce99f6f3478f07f4686abe3c8a82e7b7a1cc4d008c4bd49344f0759e9898bce06981c9fe&mpshare=1&scene=23&srcid=0319SfRKP46AoERwV8KNQ0te&sharer_sharetime=1647704088167&sharer_shareid=4ed060cc4cd1efce40e3ab6dd8d8c7d4#rd