gpt4 book ai didi

c++ - 搜索/替换 boost 正则表达式 C++

转载 作者:太空宇宙 更新时间:2023-11-04 12:17:23 25 4
gpt4 key购买 nike

我遇到了一个正则表达式替换问题,我似乎无法弄清楚如何替换文件路径的某些已配置参数。

这是我目前所拥有的:

文件路径的正则表达式可能并不完美,但它似乎工作正常。

正则表达式:^(?<path>[^\\/*?<>|]+)\\\\(?<filename>.+)\\.(?<ext>.mp4$)

文件名匹配结果名称:$2

所以这是在搜索扩展名为 mp4 的文件列表,并使用配置的匹配结果,它将作为“文件名”返回。

目标字符串示例,

\\\\folder\music\hello.mp4

结果文件名 = "你好"

我想做的是能够从正则表达式匹配中获取结果,并能够通过配置的设置替换文件/扩展名/路径的名称。

因此,如果有人希望所有匹配结果都将文件名替换为“再见”,我将如何实现。这就是我现在拥有的。

std::string sz_regex_pattern("^(?<path>[^\/*?<>|]+)\\(?<filename>.+)\.(?<ext>.mp4$)");
boost::cmatch rm;
boost::regex pattern(sz_regex_pattern, regex::icase|regex_constants::perl);
std::string complete_file_name_path = "\\folder\music\hello.mp4";
bool result = boost::regex_match(complete_file_name_path , rm, pattern);
std::string old_filename= rm.format("$2"); // returns the name of the file only

什么看起来有效但将其限制为文件夹名称不同的文件名,所以,\\folder\music\hello\hello.mp4 下面的 regex_replace 会有问题。

std::string new_filename = "goodbye";

std::string sz_new_file_name_path = boost::regex_replace(complete_file_name_path, old_filename, new_filename);

所以我以后可以,

boost::filesystem::rename(complete_file_name_path, sz_new_file_name_path);

如有任何帮助,我们将不胜感激。

最佳答案

完全不需要查找和替换,因为您已经拥有构建新路径所需的所有组件。

替换

std::string sz_new_file_name_path = boost::regex_replace(complete_file_name_path, old_filename, new_filename);

// path + newFileName + ext
std::string sz_new_file_name_path = rm.format("$1") + "\\" + new_filename + "." + rm.format("$3")

关于c++ - 搜索/替换 boost 正则表达式 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7031581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com