我想将文件扩展名从.nef
替换为.bmp
。我如何使用正则表达式?
我的代码就像 -
string str("abc.NEF");
regex e("(.*)(\\.)(N|n)(E|e)(F|f)");
string st2 = regex_replace(str, e, "$1");
cout<<regex_match (str,e)<<"REX:"<<st2<<endl;
regex_match (str,e)
让我受到了欢迎,但st2
变成了空白。我对正则表达式不太熟悉,但我希望在st2
中出现一些内容。我做错了什么?
答案 0 :(得分:1)
试试这个。
它将匹配.NEF或.nef
string str("abc.NEF");
regex e(".*(\.(NEF)|\.(nef))");
string st2 = regex_replace(str,e,"$1");
$ 1将捕获.NEF or .nef
答案 1 :(得分:0)
试试这个
string test = "abc.NEF";
regex reg("\.(nef|NEF)");
test = regex_replace(test, reg, "your_string");
答案 2 :(得分:0)
我建议不要使用正则表达式来完成这么简单的任务。 试试这个功能:
#include <string>
#include <algorithm>
std::string Rename(const std::string& name){
std::string newName(name);
static const std::string oldSuffix = "nef";
static const std::string newSuffix = "bmp";
auto dotPos = newName.rfind('.');
if (dotPos == newName.size() - oldSuffix.size() - 1){
auto suffix = newName.substr(dotPos + 1);
std::transform(suffix.begin(), suffix.end(), suffix.begin(), ::tolower);
if (suffix == oldSuffix)
newName.replace(dotPos + 1, std::string::npos, newSuffix);
}
return newName;
}
首先我们找到分隔符位置,然后获取整个文件扩展名(suffix
),将其转换为小写并与oldSuffix
进行比较。
当然,您可以将oldSuffix
和newSuffix
设置为参数,而不是静态参数。
这是一个测试程序:http://ideone.com/D09NVL
答案 3 :(得分:0)
我认为使用
提供最简单,最易读的解决方案auto result = boost::algorithm::ireplace_last_copy(input, ".nef", ".bmp");
答案 4 :(得分:-1)
我想这个
string str("abc.NEF");
regex e("(.*)\\.[Nn][Ee][Ff]$");
string st2 = regex_replace(str, e, "$1.bmp");
cout<<regex_match(str, e)<<"REX:"<<st2<<endl;
会为你做得更好。