我想将以下C ++方法转换为正则表达式匹配/替换字符串对。是否可以一次性完成此操作,即只需调用一次正则表达式替换方法? (例如this一个)
std::string f(std::string value)
{
if (value.length() < 3)
{
value = std::string("0") + value;
}
value = value.substr(0, value.length() - 2) + std::string(".") + value.substr(value.length() - 2, 2);
return value;
}
输入是一个或多个数字的字符串。 一些例子:
f("1234") = "12.34"
f("123") = "1.23"
f("12") = "0.12"
f("1") = ".01"
到目前为止,我能够实现这一目标的唯一方法是使用两个步骤:
1.应用前缀&#34; 00&#34;到输入字符串。
2.使用以下正则表达式匹配/替换对:
匹配:(0 *)(\ d +)(\ d {2})
替换:$ 2. $ 3
我的问题是,这可以在一个单一的传递中完成吗?通过只调用Regex替换方法一次,而不事先在字符串中添加任何内容。 我相信单个表达/替换不可能,但我只是想确认一下(或者提供解决方案:))。
答案 0 :(得分:0)
我希望这会有所帮助。 (再改一点)x3。
string a_="123456";
a_="14";
a_="9";
string a = regex_replace(a_,regex("(.*)(.{2})|()"),string("$1.$2."));
//a = regex_replace(regex_replace(a,regex("^"),string("00$1$2")),regex("(.+)(.{2})"),string("$1.$2"));
//a = regex_replace("00"+a,regex("(.+)(.{2})"),string("$1.$2"));
float i=atof(a.c_str());
if(!(i))//just go here for 0-9
{
i=atof((string("0.0")+a_).c_str());
}
cout<<i<<endl;
return 0;