用正则表达式替换C ++函数

时间:2014-08-04 06:26:22

标签: c++ regex

我想将以下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替换方法一次,而不事先在字符串中添加任何内容。 我相信单个表达/替换不可能,但我只是想确认一下(或者提供解决方案:))。

1 个答案:

答案 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;