【问题标题】:How to determine whether a substring is in a different string [duplicate]如何确定子字符串是否在不同的字符串中[重复]
【发布时间】:2025-11-21 17:40:01
【问题描述】:

我有一个子字符串:

substring = "please help me out"

我还有一个字符串:

string = "please help me out so that I could solve this"

如何使用 Python 查找 substring 是否是 string 的子集?

【问题讨论】:

    标签: python string


    【解决方案1】:

    in:substring in string:

    >>> substring = "please help me out"
    >>> string = "please help me out so that I could solve this"
    >>> substring in string
    True
    

    【讨论】:

    • 天哪,python太强大了,我以为它需要一个函数来做,但它是一个内置的O-o
    • 我实际上是在学习 Python 之后才学习 JS,为此你需要添加大量的 if else 语句和其他东西。所以,我只是想提醒自己它是如何在 Python 中完成的,这个答案让我对自己说“当然!”,我的意思是在 Python 中这样的事情是如此微不足道,你从来没有考虑过它们! :P
    • @GamesBrainiac 实际上,要在 JS 中做同样的事情,只需 string.indexOf(substring) != -1,更多 here
    • 一旦找到,是的,字符串中存在子字符串,如何找到字符串在什么位置,如果子字符串不止一次出现在字符串中会怎样?
    • @yoshiserry 如果你想要substringstring 中的位置,那么你想使用string.index
    【解决方案2】:
    In [7]: substring = "please help me out"
    
    In [8]: string = "please help me out so that I could solve this"
    
    In [9]: substring in string
    Out[9]: True
    

    【讨论】:

      【解决方案3】:
      foo = "blahblahblah"
      bar = "somethingblahblahblahmeep"
      if foo in bar:
          # do something
      

      (顺便说一句 - 尽量不要命名变量 string,因为有一个同名的 Python 标准库。如果你在一个大型项目中这样做,你可能会混淆人们,所以避免这样的冲突是一件好事养成习惯。)

      【讨论】:

      • 不仅会混淆,还会破坏此后引用字符串的所有内容。
      【解决方案4】:

      如果您要寻找的不仅仅是真/假,那么您最适合使用 re 模块,例如:

      import re
      search="please help me out"
      fullstring="please help me out so that I could solve this"
      s = re.search(search,fullstring)
      print(s.group())
      

      s.group() 将返回字符串“please help me out”。

      【讨论】:

      • 关于正则表达式搜索的好提示。
      • 轻点。如果你想用正则表达式解决一些问题,你就是在尝试解决两个问题。
      【解决方案5】:

      你也可以试试 find() 方法。它确定字符串 str 是出现在字符串中,还是出现在字符串的子字符串中。

      str1 = "please help me out so that I could solve this"
      str2 = "please help me out"
      
      if (str1.find(str2)>=0):
        print("True")
      else:
        print ("False")
      

      【讨论】:

        【解决方案6】:

        人们在cmets中提到了string.find()string.index()string.indexOf(),我在这里总结一下(根据Python Documentation):

        首先没有string.indexOf() 方法。 Deviljho 发布的链接显示这是一个 JavaScript 函数。

        第二个string.find()string.index() 实际上返回子字符串的索引。唯一的区别是他们如何处理未找到子字符串的情况:string.find() 返回-1string.index() 引发ValueError

        【讨论】:

          【解决方案7】:

          我想我会添加这个,以防你正在研究如何在技术面试中这样做,他们不希望你使用 Python 的内置函数 infind,这很可怕,但确实如此发生:

          string = "Samantha"
          word = "man"
          
          def find_sub_string(word, string):
            len_word = len(word)  #returns 3
          
            for i in range(len(string)-1):
              if string[i: i + len_word] == word:
            return True
          
            else:
              return False
          

          【讨论】:

          • 很好的例子,但你的标识不正确。为了加快速度,我会检查if len(substring) > len(string) return False,循环范围最好是range(len(string)-len(substring)),因为你不会在字符串的最后两个字母中找到三个字母的单词。 (节省一些迭代)。
          【解决方案8】:
          def find_substring():
              s = 'bobobnnnnbobmmmbosssbob'
              cnt = 0
              for i in range(len(s)):
                  if s[i:i+3] == 'bob':
                      cnt += 1
              print 'bob found: ' + str(cnt)
              return cnt
          
          def main():
              print(find_substring())
          
          main()
          

          【讨论】:

          • 在给定字符串中查找子字符串 'bob'。
          【解决方案9】:

          也可以用这个方法

          if substring in string:
              print(string + '\n Yes located at:'.format(string.find(substring)))
          

          【讨论】:

            【解决方案10】:

            不使用 find(),一种简单的方法是使用上面的“in”。

            如果 'str' 中存在 'substring' 则 if 部分将执行,否则 else 部分将执行。

            【讨论】: