String MATLAB中如何保证字符串以某个子字符串结尾
我正在处理for循环中的一组字符串,但我想确保字符串以String MATLAB中如何保证字符串以某个子字符串结尾,string,matlab,String,Matlab,我正在处理for循环中的一组字符串,但我想确保字符串以'.jpg'结尾,因此在某些情况下字符串的格式为str='filename.jpg.mat',在这种情况下,我需要检测最后4个字符是否冗余,因此我需要将str转换为'filename.jpg' 换句话说,我正在寻找一个如下形式的函数: function new_str = fix_end(str, wanted_ending) 所以当我打电话的时候 fix_end('filename.jpg.mat', '.jpg'), 它应该返回'fi
'.jpg'
结尾,因此在某些情况下字符串的格式为str='filename.jpg.mat'
,在这种情况下,我需要检测最后4个字符是否冗余,因此我需要将str转换为'filename.jpg'
换句话说,我正在寻找一个如下形式的函数:
function new_str = fix_end(str, wanted_ending)
所以当我打电话的时候
fix_end('filename.jpg.mat', '.jpg'),
它应该返回'filename.jpg'
有没有一种MATLAB(快速)方法可以做到这一点
谢谢你的帮助
编辑
wanted\u end
只会在str
中出现一次”.mat'
,它可以是任何东西。所以我只想删除'.jpg'
之后的内容我想这对你的案子会有用的
function new_str = fix_end(str, wanted_ending)
new_str = [str(1:strfind(str,wanted_ending)-1), wanted_ending]
end
如果您总是想摆脱.mat
,那么使用strrep
可能会更快,因此:
strrep(str,'.jpg.mat','.jpg')
或
我想这对你的案子会有用的
function new_str = fix_end(str, wanted_ending)
new_str = [str(1:strfind(str,wanted_ending)-1), wanted_ending]
end
如果您总是想摆脱.mat
,那么使用strrep
可能会更快,因此:
strrep(str,'.jpg.mat','.jpg')
或
使用正则表达式替换()可以很容易地做到这一点。这将查找在
.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'
根据@Mohsen的建议,您还可以使用以下命令
newnames = regexp(names, '^.*\.jpg', 'match', 'once');
或者作为一种功能:
function new = fix_end(str, ending)
new = regexp(str, ['^.*', regexptranslate('escape', ending)], 'match', 'once');
end
使用正则表达式替换()可以很容易地做到这一点。这将查找在
.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'
根据@Mohsen的建议,您还可以使用以下命令
newnames = regexp(names, '^.*\.jpg', 'match', 'once');
或者作为一种功能:
function new = fix_end(str, ending)
new = regexp(str, ['^.*', regexptranslate('escape', ending)], 'match', 'once');
end
Matlab函数
fileparts
可能是您想要的
fileparts-文件名和路径的部分
此MATLAB函数返回文件的路径名、文件名和扩展名
指定的文件
[pathstr,name,ext] = fileparts(filename)`
对于您的情况:
[pathstr,name,ext] = fileparts('filename.jpg.mat')
pathstr =
''
name =
filename.jpg
ext =
.mat
然后您可以根据自己的喜好使用
name
和ext
。Matlab函数fileparts
可能是您想要的
fileparts-文件名和路径的部分
此MATLAB函数返回文件的路径名、文件名和扩展名
指定的文件
[pathstr,name,ext] = fileparts(filename)`
对于您的情况:
[pathstr,name,ext] = fileparts('filename.jpg.mat')
pathstr =
''
name =
filename.jpg
ext =
.mat
然后你可以根据自己的喜好使用
name
和ext
。试试regexrep
->regexprep(文件名,.jpg.mat',.jpg')
@GameOfThrows,或者干脆用strep
代替regexrep
,速度更快。试试regexrep
->regexprep(文件名,.jpg.mat',.jpg'))
@GameOfThrows或只是strrep
而不是regexrep
@Dan yes ofc,速度更快。谢谢,但冗余部分不一定是'.mat'
,它可以是任何东西。我想regex可以在“.jpg.(任何字符串)”上完成。是的!你最后的建议很有魅力:)谢谢。(7分钟后接受)@HalilPazarlama已更新。抱歉,我刚刚意识到这个解决方案实际上是在字符串的开头添加一个引号。你知道为什么吗?谢谢,但是多余的部分不一定是'.mat'
,它可以是任何东西。我想正则表达式可以在'.jpg.(任意字符串)''上完成。是的!你最后的建议很有魅力:)谢谢。(7分钟后接受)@HalilPazarlama已更新。抱歉,我刚刚意识到这个解决方案实际上是在字符串的开头添加一个引号。你知道为什么吗?谢谢,我试过了,但它也剪辑了文件名的某些部分,因此返回类似于fi.jpg
的内容。它适用于“正常”输入,但在我的例子中,有所有“危险”字符,如破折号、等号等,其中一些字符失败。我认为真正的问题在于原名中的点。这里有一个例子:输入:-abcde.01.jpg.mat
,输出:-abcde.jpg
@HalilPazarlama我用更强大的解决方案编辑了它。谢谢,我尝试了这个方法,但它也剪辑了文件名的某些部分,因此返回类似于fi.jpg
。它适用于“正常”输入,但在我的情况下,有所有“危险”输入像破折号、等号等字符,其中一些是失败的。我认为真正的问题在于原名中的点。这里有一个例子:输入:-abcde.01.jpg.mat
,输出:-abcde.jpg
@HalilPazarlama我用更健壮的解决方案编辑了它,因为我要求使用MATLAB方法,这看起来也很吸引人。即使文件名中有多个点,它也能保证工作吗?@HalilPazarlama嗯,我认为它只剥离了最后一部分(这是一个扩展)。这并不完全是您想要的,但我认为fileparts
需要引起您的注意:)因为我要求提供一种MATLAB方法,这似乎也非常吸引人。即使文件名中有多个点,它也能保证工作吗?@HalilPazarlama嗯,我认为它只剥离了最后一部分(这是一个扩展)。这并不完全是您想要的,但我认为fileparts
需要引起您的注意:)