Python3:查找字符串

时间:2017-11-02 07:39:52

标签: python python-3.x substring string-length

我有两个小序列,我用“长串”搜索。如果找到两个序列,则“长字符串”的键将附加到列表中(我搜索IN的字符串是字典值)。

现在我正在寻找一种方法来获取/计算两个子串之间的距离(如果找到它们的话)。

所以,例如:

String: ABCDEFGHIJKL
sequence1: ABC
sequence2: JKL

我想得到DEFGHI的长度,这将是6。

这是我的代码,用于查找子字符串,以及我想要的一些“伪编码”概念(变量的开始和结束)。此代码不起作用(ofc)

def search (myDict, list1, list2):
    # initialize empty list to store found keys
    a=[]
    # iterating through dictionary
    for key, value in myDict.items():
        # if -35nt motif is found between -40 and -20
        for item in thirtyFive:
            if item in value[60:80]:
                start=myDict[:item]
            # it is checked for the -10nt motif from -40 to end
                for item in ten:
                    if item in value[80:]:
                        end=myDict[:item]
                # if both conditions are true, the IDs are
                # appended to the list
                        a.append(key)
    distance=start-end
    return a, distance

第二个想法: 到目前为止,我发现了一些关于如何在两个子串之间获取字符串的东西。所以,接下来我可以想象的是,获得序列并像len(序列)那样做。

所以,我想知道,如果我的第一个想法,以某种方式在找到小序列时这样做,在某种程度上是可能的,并且,如果我正在用我的第二个想法思考正确的方向。

提前致谢:)

使用str.find方法在@Carlos之后的

解决方案
def search (myDict, list1, list2):
    # initialize empty list to store found keys
    a=[]
    # iterating through dictionary
    for key, value in myDict.items():
        # if -35nt motif is found between -40 and -20
        for item in thirtyFive:
            if item in value[60:80]:
                start=value.find(item)
            # it is checked for the -10nt motif from -20 to end
                for item in ten:
                    if item in value[80:]:
                        end=value.find(item)
                # if both conditions are true, the IDs are
                # appended to the list
                        a.append(key)
                        search.distance=end-start-len(item)

    return a

# calling search function
x=search(d,thirtyFive,ten)
#some other things I need to print
y=len(x)
print(str(x))
print(y)
# desired output
print(search.distance)

4 个答案:

答案 0 :(得分:3)

检查

In [1]: a='ABCDEFGHIJKL'

In [2]: b='ABC'

In [3]: c='JKL'

In [4]: a.find(b)
Out[4]: 0

In [6]: a.find(c)
Out[6]: 9

In [7]: l=a.find(b) + len(b)

In [8]: l
Out[8]: 3

In [10]: a[l:a.find(c)]
Out[10]: 'DEFGHI'

In [11]: 

答案 1 :(得分:3)

您也可以使用正则表达式执行此操作:

import re
s = "ABCDEFGHIJKL"
seq1 = "ABC"
seq2 = "JKL"

s1 = re.match(seq1 + "(.*)" + seq2, s).group(1)
print s1
print(len(s1))

<强>输出

DEFGHI
6

使用str.replace

s2 = s.replace(seq1, '').replace(seq2, '')
print s2
print(len(s2))

<强>输出

DEFGHI
6

现场演示here

答案 2 :(得分:1)

使用str.find()获取两个索引,并调整第一个索引的长度。

另外不要忘记角落情况,例如子串重叠的地方。

答案 3 :(得分:1)

使用正则表达式的解决方案:

import re

string = "ABCDEFGHIJKL"
sequence1 = "ABC"
sequence2 = "JKL"

result = re.search(sequence1+'(.*)'+sequence2,string)
print(len(result.group(1)))