【问题标题】:Check if string contains substring at index检查字符串是否在索引处包含子字符串
【发布时间】:2018-01-07 13:48:56
【问题描述】:

在 Python 3.5 中,给定这个字符串:

"rsFooBargrdshtrshFooBargreshyershytreBarFootrhj"

还有索引17——所以,F 在第二次出现FooBar 的开头——我如何检查"FooBar" 是否存在?在这种情况下,它应该返回 True,而如果我给它索引 13 它应该返回 false。

【问题讨论】:

    标签: python string substring


    【解决方案1】:

    实际上有一种非常简单的方法可以做到这一点,而无需使用任何额外的内存:

    >>> s = "rsFooBargrdshtrshFooBargreshyershytreBarFootrhj"
    >>> s.startswith("FooBar", 17)
    True
    >>> 
    

    startswith 的可选第二个参数告诉它在偏移量 17(而不是默认的 0)处开始检查。在此示例中,值 2 也将返回 True,所有其他值将返回 False。

    【讨论】:

      【解决方案2】:

      您需要根据子字符串的长度对原始字符串进行切片并比较两个值。例如:

      >>> my_str = "rsFooBargrdshtrshFooBargreshyershytreBarFootrhj"
      
      >>> word_to_check, index_at = "FooBar", 17
      >>> word_to_check == my_str[index_at:len(word_to_check)+index_at]
      True
      
      >>> word_to_check, index_at = "FooBar", 13
      >>> word_to_check == my_str[index_at:len(word_to_check)+index_at]
      False
      

      【讨论】:

        【解决方案3】:
        print("rsFooBargrdshtrshFooBargreshyershytreBarFootrhj"[17:].startswith('Foo')) # True
        

        或共同点

        my_string[start_index:].startswith(string_to_check)
        

        【讨论】:

        • 这是正确的,但使用的内存比@Moinuddin Quadri 的答案多,而且速度有点慢;-)
        【解决方案4】:

        使用 Tom Karzes 方法,作为函数

        def contains_at(in_str, idx, word):
            return in_str[idx:idx+len(word)] == word
        
        >>> contains_at(s, 17, "FooBar")
        >>> True
        

        【讨论】:

        • 感谢您的信任,但我意识到有更好的方法来做到这一点。看我的回答:)
        【解决方案5】:

        试试这个:

        def checkIfPresent(strng1, strng2, index):
            a = len(strng2)
            a = a + index
            b = 0
            for i in range(index, a):
                if strng2[b] != strng1[i]:
                   return false
                b = b+1
            return true
        
        s = "rsFooBargrdshtrshFooBargreshyershytreBarFootrhj"
        check = checkIfPresent(s, Foobar, 17)
        
        print(check)
        

        【讨论】:

        • 真的不是pythonic!仅对理解一些基本概念有用。
        • 确实切片可能更有用(没想到...这是我想到的第一件事)但这仍然是他问题的答案...
        猜你喜欢
        • 2011-11-09
        • 2013-05-18
        • 2021-12-20
        • 2014-11-22
        • 2013-02-05
        • 1970-01-01
        • 2021-12-14
        • 2017-06-17
        • 2013-03-04
        相关资源
        最近更新 更多