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

27 投票
4 回答
39634 浏览
提问于 2025-04-18 14:59

我知道很多方法可以找到一个字符串中的子串,比如从开始位置到结束位置,或者在某些字符之间等等。但是我遇到了一个问题,不知道怎么解决:

我有两个路径字符串,比如:folder1/folder2/folder3/new_folder/image.jpgfolder1/folder2/folder3/folder4/image2.png

我想从这两个路径中只提取最后的部分,也就是:image.jpgimage2.png。可是我该怎么提取子串呢?我不知道它从哪里开始(我不知道具体的位置,但我可以猜测它会在最后一个 / 字符后面),而且路径中可能有很多次重复的字符(/),而且文件的扩展名也不一样(.jpg.png 甚至还有其他的)。

4 个回答

1
import re

pattern = re.compile(r"(.*?)/([a-zA-Z0-9]+?\.\w+)")
y = pattern.match(x).groups()
print y[1]

没有长度限制。

6

你可以在最后一次出现的地方进行这个分割。

my_string='folder1/folder2/folder3/new_folder/image2.png'
print(my_string.rsplit("/",1)[1])
output:-
image2.png
23

你也可以这样做 -

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

>> image.png
41

使用 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

撰写回答