[英]Find index of last occurrence of a substring in a string
我想在给定的输入字符串str
某个子字符串最后一次出现的位置(或索引)。
例如,假设输入字符串是str = 'hello'
并且子字符串是target = 'l'
,那么它应该输出 3。
我怎样才能做到这一点?
您可以使用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
使用str.rindex
方法。
>>> 'hello'.rindex('l')
3
>>> 'hello'.index('l')
2
尝试这个:
s = 'hello plombier pantin'
print (s.find('p'))
6
print (s.index('p'))
6
print (s.rindex('p'))
15
print (s.rfind('p'))
不是想复活一个不活跃的帖子,但是因为这个帖子还没有发布......
(在找到这个问题之前,我就是这样做的)
s = "hello"
target = "l"
last_pos = len(s) - 1 - s[::-1].index(target)
说明:当您搜索最后一次出现时,实际上是在搜索反向字符串中的第一次出现。 知道这一点,我做了s[::-1]
(它返回一个反向字符串),然后从那里索引target
。 然后我做了len(s) - 1 - the index found
的索引,因为我们想要未反转(即原始)字符串中的索引。
不过要小心! 如果target
是多个字符,您可能不会在反转字符串中找到它。 要解决此问题,请使用last_pos = len(s) - 1 - s[::-1].index(target[::-1])
,它搜索target
的反向版本。
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
对于这种情况,可以使用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 .
如果您不想使用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
Python String rindex() 方法
描述
Python 字符串方法 rindex() 返回找到子字符串 str 的最后一个索引,或者如果不存在此类索引则引发异常,可选择将搜索限制为 string[beg:end]。
句法
以下是 rindex() 方法的语法 -
str.rindex(str, beg=0 end=len(string))
参数
str - 这指定要搜索的字符串。
beg - 这是起始索引,默认为 0
len - 这是结束索引,默认情况下它等于字符串的长度。
返回值
如果找到,此方法返回最后一个索引,否则如果找不到 str 则引发异常。
例子
下面的例子展示了 rindex() 方法的用法。
现场演示
str1 = "this is string example....wow!!!";
str2 = "is";
print str1.rindex(str2)
print str1.index(str2)
当我们运行上面的程序时,它会产生以下结果 -
5
2
# 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)
您可以使用rindex()
函数获取字符串中最后一次出现的字符
s="hellloooloo"
b='l'
print(s.rindex(b))
str = "Hello, World"
target='l'
print(str.rfind(target) +1)
或者
str = "Hello, World"
flag =0
target='l'
for i,j in enumerate(str[::-1]):
if target == j:
flag = 1
break;
if flag == 1:
print(len(str)-i)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.