如何在MATLAB中确保字符串以某个子字符串结尾

时间:2016-06-13 13:47:24

标签: string matlab

我正在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(快速)方法来做到这一点?

感谢您的帮助!

修改

  1. 可以安全地假设wanted_ending只会在str中出现一次。
  2. 冗余部分不一定是'.mat',它可以是任何东西。所以我只想删除'.jpg'之后的任何内容。

3 个答案:

答案 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

然后,您可以根据自己的喜好使用nameext