我有一个字符串 abcdabababcebc
,如何获取字符 b
第二次出现的位置?我查找到了 rfind() 方法,但由于它返回的是最后一个匹配项的索引,而不是倒数第二个,所以无法使用。
我正在使用 Python 3。
我有一个字符串 abcdabababcebc
,如何获取字符 b
第二次出现的位置?我查找到了 rfind() 方法,但由于它返回的是最后一个匹配项的索引,而不是倒数第二个,所以无法使用。
我正在使用 Python 3。
这里是一种方法:
>>> def find_second_last(text, pattern):
... return text.rfind(pattern, 0, text.rfind(pattern))
...
>>> find_second_last("abracadabra", "a")
7
使用可选的起始和结束参数,在找到第一个匹配项后查找第二个匹配项。
注意:此操作不进行任何合理性检查,如果文本中没有至少2个模式出现,则会崩溃。
列举所有索引,选择您想要的那一个。
In [19]: mystr = "abcdabababcebc"
In [20]: inds = [i for i,c in enumerate(mystr) if c=='b']
In [21]: inds
Out[21]: [1, 5, 7, 9, 12]
In [22]: inds[-2]
Out[22]: 9
mystr
很大并且/或者有很多副本的 'b'
,那么这不是一个好的解决方案(在这种情况下,请参见MAK的解决方案),但通常这并不重要。 - abarnert>>> s = "abcdabababcebc"
>>> s[:s.rfind("b")].rfind("b")
9
str.rfind
的所有三个参数,或者阅读了描述?这并没有解释为什么会被踩(我不知道是谁踩的或为什么);我很好奇你在哪里“搜索并找到rfind()”没有那些信息,因为它真的应该被修复。 - abarnert