【问题标题】:Find index of last occurrence of a substring in a string查找字符串中子字符串最后一次出现的索引
【发布时间】:2012-03-23 06:28:27
【问题描述】:

我想在给定的输入字符串str中找到某个子字符串最后一次出现的位置(或索引)。

例如,假设输入字符串是str = 'hello',子字符串是target = 'l',那么应该输出3。

我该怎么做?

【问题讨论】:

    标签: python string


    【解决方案1】:

    使用.rfind():

    >>> s = 'hello'
    >>> s.rfind('l')
    3
    

    也不要使用str 作为变量名,否则你会隐藏内置的str()

    【讨论】:

      【解决方案2】:

      您可以使用rfind()rindex()
      Python2 链接:rfind() rindex()

      >>> s = 'Hello StackOverflow Hi everybody'
      
      >>> print( s.rfind('H') )
      20
      
      >>> print( s.rindex('H') )
      20
      
      >>> print( s.rfind('other') )
      -1
      
      >>> print( s.rindex('other') )
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
      ValueError: substring not found
      

      不同之处在于找不到子字符串时,rfind() 返回-1,而rindex() 引发异常ValueError(Python2 链接:ValueError)。

      如果您不想检查rfind() 返回代码-1,您可能更喜欢rindex(),它将提供可以理解的错误消息。否则,您可以搜索代码中出现意外值 -1 的分钟...


      示例:搜索最后一个换行符

      >>> txt = '''first line
      ... second line
      ... third line'''
      
      >>> txt.rfind('\n')
      22
      
      >>> txt.rindex('\n')
      22
      

      【讨论】:

      • 嗨@JacobSchneider。我根据您的评论添加了一个示例。我不明白你的问题。请提供更多信息:Python 版本、字符串的内容...干杯
      【解决方案3】:

      使用str.rindex 方法。

      >>> 'hello'.rindex('l')
      3
      >>> 'hello'.index('l')
      2
      

      【讨论】:

      • 如果在字符串中找不到单词,这将引发错误。使用 rfind 会更好。
      【解决方案4】:

      试试这个:

      s = 'hello plombier pantin'
      print (s.find('p'))
      6
      print (s.index('p'))
      6
      print (s.rindex('p'))
      15
      print (s.rfind('p'))
      

      【讨论】:

        【解决方案5】:

        不尝试恢复非活动帖子,但由于尚未发布...

        (在找到这个问题之前我是这样做的)

        s = "hello"
        target = "l"
        last_pos = len(s) - 1 - s[::-1].index(target)
        

        解释:当您搜索最后一个匹配项时,实际上您是在搜索反转字符串中的第一个匹配项。知道了这一点,我做了s[::-1](它返回一个反转的字符串),然后从那里索引target。然后我做了len(s) - 1 - the index found,因为我们想要unreversed(即原始)字符串中的索引。

        不过要小心!如果target 不止一个字符,您可能不会在反向字符串中找到它。要解决此问题,请使用 last_pos = len(s) - 1 - s[::-1].index(target[::-1]),它会搜索 target 的反向版本。

        【讨论】:

        • 我赞成这个答案,因为虽然对原始问题没有太大用处,但总的来说它很有趣且具有教育意义。我想很多人学习 Python 的过程都是这样的。
        【解决方案6】:

        more_itertools 库提供了用于查找所有字符或所有子字符串的索引的工具。

        给定

        import more_itertools as mit
        
        
        s = "hello"
        pred = lambda x: x == "l"
        

        代码

        字符

        现在有可用的rlocate 工具:

        next(mit.rlocate(s, pred))
        # 3
        

        补充工具是locate

        list(mit.locate(s, pred))[-1]
        # 3
        
        mit.last(mit.locate(s, pred))
        # 3
        

        子字符串

        还有一个window_size参数可用于定位几个项目的前导项目:

        s = "How much wood would a woodchuck chuck if a woodchuck could chuck wood?"
        substring = "chuck"
        pred = lambda *args: args == tuple(substring)
        
        next(mit.rlocate(s, pred=pred, window_size=len(substring)))
        # 59
        

        【讨论】:

          【解决方案7】:

          Python String rindex() 方法

          说明
          Python 字符串方法 rindex() 返回找到子字符串 str 的最后一个索引,如果不存在此类索引,则引发异常,可选择将搜索限制为 string[beg:end]。

          语法
          以下是 rindex() 方法的语法 -

          str.rindex(str, beg=0 end=len(string))
          

          参数
          str - 这指定要搜索的字符串。

          beg - 这是起始索引,默认为 0

          len - 这是结束索引,默认情况下它等于字符串的长度。

          返回值
          如果找到此方法,则返回最后一个索引,否则如果未找到 str,则引发异常。

          示例
          下面的例子展示了 rindex() 方法的使用。

          现场演示

          !/usr/bin/python

          str1 = "this is string example....wow!!!";
          str2 = "is";
          
          print str1.rindex(str2)
          print str1.index(str2)
          

          当我们运行上面的程序时,它会产生以下结果 -

          5
          2
          

          参考:Python String rindex() Method - Tutorialspoint

          【讨论】:

            【解决方案8】:

            对于这种情况,rfind()rindex() 字符串方法都可以使用,两者都将返回字符串中找到子字符串的最高索引,如下所示。

            test_string = 'hello'
            target = 'l'
            print(test_string.rfind(target))
            print(test_string.rindex(target))
            

            但是在使用rindex() 方法时应该记住一件事,如果在搜索的字符串中没有找到目标值,rindex() 方法会引发 ValueError [substring not found],在另一方面,rfind() 只会返回 -1。

            【讨论】:

              【解决方案9】:

              如果您不想使用rfind,那么这会解决问题/

              def find_last(s, t):
                  last_pos = -1
                  while True:
                      pos = s.find(t, last_pos + 1)
                      if pos == -1:
                          return last_pos
                      else:
                          last_pos = pos
              

              【讨论】:

                【解决方案10】:
                # Last Occurrence of a Character in a String without using inbuilt functions
                str = input("Enter a string : ")
                char = input("Enter a character to serach in string : ")
                flag = 0
                count = 0
                for i in range(len(str)):
                    if str[i] == char:
                        flag = i
                if flag == 0:
                    print("Entered character ",char," is not present in string")
                else:
                    print("Character ",char," last occurred at index : ",flag)
                

                【讨论】:

                  【解决方案11】:

                  您可以使用rindex() 函数来获取字符串中字符的最后一次出现

                  s="hellloooloo"
                  b='l'
                  print(s.rindex(b))
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-01-10
                    • 2010-11-04
                    • 2017-10-31
                    • 2011-03-09
                    • 1970-01-01
                    • 1970-01-01
                    • 2018-08-24
                    相关资源
                    最近更新 更多