找到字符后的最后一个子串
我知道很多方法可以找到一个字符串中的子串,比如从开始位置到结束位置,或者在某些字符之间等等。但是我遇到了一个问题,不知道怎么解决:
我有两个路径字符串,比如:folder1/folder2/folder3/new_folder/image.jpg
和 folder1/folder2/folder3/folder4/image2.png
。
我想从这两个路径中只提取最后的部分,也就是:image.jpg
和 image2.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