我正在for循环中处理一组字符串,但我想确保字符串以'.jpg'
结尾,因此在某些情况下字符串的格式为str = 'filename.jpg.mat'
,在此case,我需要将最后4个字符检测为冗余,因此我需要将str转换为'filename.jpg'
换句话说,我正在寻找这种形式的功能:
function new_str = fix_end(str, wanted_ending)
所以当我打电话时
fix_end('filename.jpg.mat', '.jpg'),
它应该返回'filename.jpg'
。
有没有MATLAB(快速)方法来做到这一点?
感谢您的帮助!
wanted_ending
只会在str
中出现一次。'.mat'
,它可以是任何东西。所以我只想删除'.jpg'
之后的任何内容。答案 0 :(得分:2)
您可以使用正则表达式替换(regexprep
)轻松完成此操作。这将查找.jpg
之后具有某些内容的名称并将其删除。
names = {'file1.jpg.mat', 'file2.jpg.mat2', 'file3.jpg.mat3', 'file4.jpg'}
newnames = regexprep(names, '(?<=\.jpg).*', '');
% 'file1.jpg' 'file2.jpg' 'file3.jpg' 'file4.jpg'
或者更一般地说,以下内容接受您要保留的结尾并删除之后发生的任何内容。
function new = fix_end(str, ending)
new = regexprep(str, ['(?<=', regexptranslate('escape', ending), ').*'], '');
end
fix_end('file1.jpg.mat', '.jpg')
% file1.jpg
作为旁注,如果你所有所需要的所有字符串都以.jpg
结尾,为什么不将.jpg
追加到所有字符串,不管他们之前的扩展名是什么?
new_str = [str, '.jpg'];
根据@Mohsen的建议,您也可以使用以下
newnames = regexp(names, '^.*\.jpg', 'match', 'once');
或作为一项功能:
function new = fix_end(str, ending)
new = regexp(str, ['^.*', regexptranslate('escape', ending)], 'match', 'once');
end
答案 1 :(得分:1)
我认为这适合您的情况
function new_str = fix_end(str, wanted_ending)
new_str = [str(1:strfind(str,wanted_ending)-1), wanted_ending]
end
使用strrep
可能会更快,如果它总是.mat
你想要摆脱它,那么:
strrep(str,'.jpg.mat','.jpg')
或
strrep(str,'.mat','')
答案 2 :(得分:0)
Matlab函数fileparts
可能是你想要的
fileparts - 文件名和路径的部分
此MATLAB函数返回路径名,文件名和扩展名 指定的文件。
[pathstr,name,ext] = fileparts(filename)`
对于你的情况:
[pathstr,name,ext] = fileparts('filename.jpg.mat')
pathstr =
''
name =
filename.jpg
ext =
.mat
然后,您可以根据自己的喜好使用name
和ext
。