查找字符串中最后一次出现的子字符串的索引

Par*_*rth 295 python string

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

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

我怎样才能做到这一点?

Rik*_*ggi 531

用途.rfind():

>>> s = 'hello'
>>> s.rfind('l')
3
Run Code Online (Sandbox Code Playgroud)

也不要使用str变量名称,否则你会影响内置的str().

  • +1提示不使用`str`作为变量名。人们在python中应避免使用的另一个变量名是abc。本机API中有一个名为“ abc”的模块。 (2认同)

oli*_*bre 68

您可以使用rfind()Python2链接:rindex()
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
Run Code Online (Sandbox Code Playgroud)

区别在于未找到子字符串时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
Run Code Online (Sandbox Code Playgroud)


rmm*_*mmh 36

使用该str.rindex方法.

>>> 'hello'.rindex('l')
3
>>> 'hello'.index('l')
2
Run Code Online (Sandbox Code Playgroud)

  • 如果在字符串中找不到该单词,这将引发错误。使用 rfind 会更好。 (2认同)

小智 6

尝试这个:

s = 'hello plombier pantin'
print (s.find('p'))
6
print (s.index('p'))
6
print (s.rindex('p'))
15
print (s.rfind('p'))
Run Code Online (Sandbox Code Playgroud)


Adi*_*219 5

不是想复活一个不活跃的帖子,但是因为这个帖子还没有发布......

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

s = "hello"
target = "l"
last_pos = len(s) - 1 - s[::-1].index(target)
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我赞成这个答案,因为虽然对于最初的问题来说不太有用,但总的来说它很有趣且具有教育意义。我想Python的学习很多时候就是这样的。 (2认同)