Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String MATLAB中如何保证字符串以某个子字符串结尾_String_Matlab - Fatal编程技术网

String MATLAB中如何保证字符串以某个子字符串结尾

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

我正在处理for循环中的一组字符串,但我想确保字符串以
'.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
    需要引起您的注意:)