为什么rfind和find在Python 2.6.5中返回相同的值?

时间:2011-07-13 06:38:08

标签: python find substring

我对Python比较陌生,有些事情正在起作用。基本上,当我在字符串上调用str.rfind("test")时,输出与str.find("test")相同。我最好向您展示一个例子:

Python 2.6.5 (r265:79063, May  6 2011, 17:25:59) 
[GCC 4.5.0 20100604 [gcc-4_5-branch revision 160292]] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import string
>>> line = "hello what's up"
>>> line.rfind("what")
6
>>> line.find("what")
6

根据我的理解,line.find的值是可以的,但line.rfind的值应为9。我是否误解了这些功能或者没有很好地使用它们?

3 个答案:

答案 0 :(得分:23)

我认为你期望rfind返回"what"的第一个/最左边匹配中最右边字符的索引。它实际上返回"what的最后一个/ 最右边匹配中最左边字符的索引。引用the documentation

  

str.rfind(sub[, start[, end]])

     

返回找到substring sub 的字符串中的最高索引,以便 sub 包含在s[start:end]中。可选参数 start end 被解释为切片表示法。失败时返回-1

"ab c ab".find("ab")将为0,因为最左边的位置位于左端 "ab c ab".rfind("ab")将为5,因为最右边的匹配项始于该索引。

答案 1 :(得分:2)

要更好地理解.rfind的含义,请尝试使用“hello what up up to hello what up up”这样的字符串示例(即多出一次“what”)

答案 2 :(得分:2)

find()将返回第一个匹配的索引。但是 rfind 会给你最后一次出现的模式。如果您尝试匹配重复匹配案例,将会很清楚。

查看此示例
       >>> string='hey! how are you harish'
       >>>string.find('h')
       >>>0                #it matched for first 'h' in the string
       >>> string.rfind('h')    
           22             #it matched for the last 'h' in the string