python中查找字符串

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

 

posted @ 2022-03-20 23:21  小鲨鱼2018  阅读(1161)  评论(0编辑  收藏  举报