代码之家  ›  专栏  ›  技术社区  ›  Shushiro

Python3:查找字符串的两个子字符串之间的长度

  •  1
  • Shushiro  · 技术社区  · 7 年前

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

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

    例如:

    String: ABCDEFGHIJKL
    sequence1: ABC
    sequence2: JKL
    

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

    这是我查找子字符串的代码,其中包含一些我想要的“伪codish”概念(变量开始和结束)。此代码无效(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
    

    第二个想法:

    所以,我想知道,如果我的第一个想法,在我找到小序列的时候,以某种方式做到这一点,是否有可能,如果我用我的第二个想法朝着正确的方向思考。

    提前感谢:)

    使用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 回复  |  直到 4 年前
        1
  •  3
  •   Sanket    7 年前

    检查这个

    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]: 
    
        2
  •  3
  •   Ashish Ranjan    7 年前

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

    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))
    

    输出

    德夫吉
    6.
    

    现场演示 here

        3
  •  1
  •   Carlos    7 年前

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

    也不要忘记转角情况,例如子字符串重叠的情况。

        4
  •  1
  •   kingmakerking    7 年前

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

    import re
    
    string = "ABCDEFGHIJKL"
    sequence1 = "ABC"
    sequence2 = "JKL"
    
    result = re.search(sequence1+'(.*)'+sequence2,string)
    print(len(result.group(1)))