从双引号包围的子字符串中删除特定字符

时间:2018-09-10 16:03:19

标签: c++ c++11 replace

我下面有一个字符串(文件行)

  

0.000000000,171.934206000,100.000,“ 171,925.828942”,0x0000000000000000

其中一个值位于双引号之间,并包含逗号来表示该值。

我只需要从双引号引起来的值中除去逗号。从双引号括起来的值中删除逗号后,还需要删除那些双引号。

基本上我希望上面的行像这样转换。

  

0.000000000,171.934206000,100.000,171925.828942,0x0000000000000000

我有以下版本的代码,但是希望有更好的版本来实现以上目的。

std::size_t doubleQuotesStartPos = 0, doubleQuotesEndPos = 0;
while ((doubleQuotesStartPos = line.find("\"", doubleQuotesStartPos)) != std::string::npos)
    {
        doubleQuotesEndPos = line.find("\"", doubleQuotesStartPos + 1);
        if (doubleQuotesEndPos != std::string::npos)
        {
            std::string tempData = line.substr(doubleQuotesStartPos + 1, doubleQuotesEndPos - doubleQuotesStartPos - 1);
            std::string replacedData = tempData;
            strReplace(replacedData, ",", "");
            line.replace(doubleQuotesStartPos + 1, tempData.length(), replacedData);

        }
        doubleQuotesStartPos = doubleQuotesEndPos + 1;
    }

1 个答案:

答案 0 :(得分:0)

为什么不使用正则表达式?我将口头翻译成:

  

匹配",后跟一个或多个数字,后跟,,后跟一个或多个(数字或.),后跟"

它映射到正则表达式"\d+,[\d\.]+"。要引用匹配的内容,您可以引入捕获组:

  

找到"(\d+),([\d\.]+)"并替换为\1\2

您可以在例如记事本++。

如果您需要在C ++应用程序中进行操作,则C ++自C ++ 11起也有regex support。这是demo