我有一个像这样的文件名
/mnt/opt/storage/ssd/subtitles/8/vtt/2011022669-5126858992107.vtt
如何使用正则表达式用*
替换文件名,所以我得到了
/mnt/opt/storage/ssd/subtitles/8/vtt/*
?
我知道简单的for循环拆分或boost::filesystem
方法,我正在寻找regex_replace
方法。
答案 0 :(得分:5)
你不需要regexp:
string str = "/mnt/opt/storage/ssd/subtitles/8/vtt/2011022669-5126858992107.vtt";
auto lastSlash = str.find_last_of('/');
str.replace(str.begin() + lastSlash + 1, str.end(), "*");
答案 1 :(得分:2)
尝试这种模式
(([\w+\-])+)(?=(\.\w{3}))
在记事本++中测试。
(?=())它的外观。因此,只有格式为.xxx或.xx的扩展名(。\ w {2,3))在此组之后才匹配([\ w + - ])+。 在c ++中,你必须将group替换为类似的东西 替换(字符串,$ 1,' *') - 我不知道c ++替换funciton,只是假设。
$ 1,$ 2,$ 3 ...其组号,在这种情况下 - $ 1(([\ w + - ])+)。
答案 2 :(得分:2)
以下是regexp_replace [live]的解决方案:
std::string path = "/mnt/opt/storage/ssd/subtitles/8/vtt/2011022669-5126858992107.vtt";
std::regex re(R"(\/[^\/]*?\..+$)");
std::cout << path << '\n';
std::cout << std::regex_replace(path, re, "/*") << '\n';
输出:
/mnt/opt/storage/ssd/subtitles/8/vtt/2011022669-5126858992107.vtt 的/ mnt /选择/存储/ SSD /字幕/ 8 / VTT / *
但是,... regexp对于这种简单的替换来说似乎有点太重了