如何使用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')
详情
^
- 字符串开头
(?:(.*)(\.)|(.*))
- 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 八度。
假设我有这个 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')
详情
^
- 字符串开头(?:(.*)(\.)|(.*))
- 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 八度。