找到一个字符后的最后一个子字符串

Ziv*_*iva 11 python regex string substring

我知道如何找到子字符串的很多方法:从开始索引到结束索引,字符之间等,但我有一个问题,我不知道如何解决:我有一个字符串,例如路径:folder1/folder2/folder3/new_folder/image.jpg 和第二个路径:folder1/folder2/folder3/folder4/image2.png

从这条路径我想只采取最后的部分:image.jpgimage2.png.如果我不知道它何时开始(我不知道索引,但我可以认为它将在最后一个/字符之后),如果很多时候一个字符重复(/)并且扩展名不同,我如何获取子字符串(.jpg.png甚至其他)?

Mar*_*ers 22

os.path.basename()改用而不用担心细节.

os.path.basename() 返回路径的文件名部分:

>>> import os.path
>>> os.path.basename('folder1/folder2/folder3/new_folder/image.jpg')
'image.jpg'
Run Code Online (Sandbox Code Playgroud)

对于更通用的字符串拆分问题,您可以使用从末尾开始计算str.rpartition()给定字符序列上的字符串:

>>> 'foo:bar:baz'.rpartition(':')
('foo:bar', ':', 'baz')
>>> 'foo:bar:baz'.rpartition(':')[-1]
'baz'
Run Code Online (Sandbox Code Playgroud)

并且str.rsplit()你可以从最后再次分割多次到一个限制:

>>> 'foo:bar:baz:spam:eggs'.rsplit(':', 3)
['foo:bar', 'baz', 'spam', 'eggs']
Run Code Online (Sandbox Code Playgroud)

最后但并非最不重要的是,您可以使用str.rfind()只查找子字符串的索引,从末尾搜索:

>>> 'foo:bar:baz'.rfind(':')
7
Run Code Online (Sandbox Code Playgroud)


Dar*_*pan 6

你也可以这样做 -

str_mine = 'folder1/folder2/folder3/new_folder/image.jpg'    
print str_mine.split('/')[-1]

>> image.png
Run Code Online (Sandbox Code Playgroud)


out*_*ier 6

您可以在最后一次出现时进行此拆分

my_string='folder1/folder2/folder3/new_folder/image2.png'
print(my_string.rsplit("/",1)[1])
output:-
image2.png
Run Code Online (Sandbox Code Playgroud)

  • @Darpan你的意思是[你的答案](/sf/answers/3054153231/)(建议`split('/')[-1]`)?是的,它增加了很多。虽然您的答案会拆分整个字符串并获取最后一个元素,但这只会从右侧拆分一次。效率高一点。更有效的是使用“rpartition”...... (2认同)