我知道如何查找子字符串的方法很多:从开始索引到结束索引,字符之间等,但我有一个问题,我不知道如何解决:
我有一个字符串,例如路径:folder1/folder2/folder3/new_folder/image.jpg
和第二条路径:folder1/folder2/folder3/folder4/image2.png
从这条路径我想只采取最后的部分:image.jpg
和image2.png
。如果我不知道它何时开始(我不知道索引,但我可以认为它将在最后/
个字符之后),如果多次重复一个字符,我怎么能取一个子串({ {1}})和扩展程序不同(/
和.jpg
甚至其他扩展程序?
答案 0 :(得分:20)
请改用os.path.basename()
,不要担心细节。
os.path.basename()
返回路径的文件名部分:
>>> import os.path
>>> os.path.basename('folder1/folder2/folder3/new_folder/image.jpg')
'image.jpg'
对于更通用的字符串拆分问题,您可以使用str.rpartition()
拆分给定字符序列的字符串从末尾开始计算:
>>> 'foo:bar:baz'.rpartition(':')
('foo:bar', ':', 'baz')
>>> 'foo:bar:baz'.rpartition(':')[-1]
'baz'
和str.rsplit()
您可以再次从最后分割多次到达限制:
>>> 'foo:bar:baz:spam:eggs'.rsplit(':', 3)
['foo:bar', 'baz', 'spam', 'eggs']
最后但并非最不重要的是,你可以使用str.rfind()
来查找子字符串的索引,从最后搜索:
>>> 'foo:bar:baz'.rfind(':')
7
答案 1 :(得分:5)
你也可以这样做 -
str_mine = 'folder1/folder2/folder3/new_folder/image.jpg'
print str_mine.split('/')[-1]
>> image.png
答案 2 :(得分:2)
你可以在最后一次出现时进行拆分
my_string='folder1/folder2/folder3/new_folder/image2.png'
print(my_string.rsplit("/",1)[1])
output:-
image2.png
答案 3 :(得分:1)
import re
pattern=re.compile(r"(.*?)/([a-zA-Z0-9]+?\.\w+)")
y=pattern.match(x).groups()
print y[1]
没有长度限制。
答案 4 :(得分:1)
您不需要花哨的东西,只需查看 the string methods in the standard library,您就可以轻松地在“文件名”部分和路径之间拆分字符串:
my_string='folder1/folder2/folder3/new_folder/image2.png'
print(my_string.rsplit('/', 1))
print(my_string.rsplit('/', 1)[-1])
输出:
['folder1/folder2/folder3/new_folder', 'image2.png']
image2.png