如何使用Matlab/Octave regexprep(正则表达式替换)在扩展名前为文件名添加后缀

How to use Matlab/Octave regexprep (regular expression replace) to add suffix to file name before extension

假设我有这个 Matlab 或 Octave 字符变量:

>> filename = 'my.file.ext'

我想要一个 regexprep 命令,它在扩展名之前的文件名中添加一个后缀,例如“_old”,将其转换为 'my.file_old.ext'。

以下将所有点替换为“_old.”:

>> regexprep(filename, '\.', '_old.')
ans =
    'my_old.file_old.ext'

什么是仅在最后一个点前添加“_old”的 regexprep 命令? (理想情况下,如果没有点(没有扩展名),请在最后添加“_old”。)

提前致谢!

您可以使用

regexprep(filename, '^(?:(.*)(\.)|(.*))', '_old')

regex demo

详情

  • ^ - 字符串开头
  • (?:(.*)(\.)|(.*)) - non-capturing 组匹配两个选项之一:
    • (.*)(\.) - 第 1 组(</code> 反向引用指的是组的值):尽可能多的任何零个或多个字符,然后是第 2 组(<code>):一个点
    • | - 或
    • (.*) - 第 3 组 (</code>):尽可能多的任意零个或多个字符</li> </ul> </li> </ul> <p>如果备选方案不匹配,则对捕获组的反向引用为空字符串。因此,如果 <code>(.*)(\.) 匹配,则替换为组 1 + _old + 组 2 值。否则,它是第 3 组 + _old(只是在末尾追加)。

如果可以选择不使用正则表达式,您可以使用 fileparts,如下所示:

filename  = 'my.file.ext';
suffix = '_old';
[p, n, e] = fileparts(filename); % path, file, extension; each possibly empty
result = [p, n, suffix, e];

Example 八度。