从字符串中剥离空格

时间:2017-06-05 08:53:35

标签: c++ boost tokenize strip

我有以下字符串

argsStr = "server ('m1.labs.terada')ta.com') username ('user5') password('user)5') dbname ('default')";

我想提取参数名称,即“server”“username”“password”。

我正在使用以下正则表达式

boost::regex re1("\\(\'[!-~]+\'\\)");
boost::sregex_token_iterator x(argsStr.begin(), argsStr.end(), re1, -1),x1;   boost::sregex_token_iterator y;
std::copy(x, x1, std::back_inserter(v2));

v2是字符串向量,我在其中提取标记。但是,我得到的代币是

"server "    INSTEAD of "server
" username "  INSTEAD of "username".

如何删除这些空格?

3 个答案:

答案 0 :(得分:1)

我建议使用boost string algorithms

#include <boost/algorithm/string.hpp>

std::string str("hello world! ");
boost::trim_right(str);

答案 1 :(得分:0)

您可以使用以下方法从字符串中删除空格:

#include <boost/algorithm/string/erase.hpp>

str.erase(remove_if(str.begin(), str.end(), ::isspace),str.end());

答案 2 :(得分:0)

您只需在正则表达式中添加几个"\s*"

std::regex re1(R"(\s*\('[!-~]+'\)\s*)");
std::sregex_token_iterator x(argsStr.begin(), argsStr.end(), re1, -1), x1;   
std::copy(x, x1, std::back_inserter(v2));  

\s代表&#34;空白字符&#34;。
这将留下最左边的空白区域 - 如果你想考虑到这一点,你可以改变范围:

std::string::iterator start = std::find_if_not(argsStr.begin(), argsStr.end(), ::isspace);
std::sregex_token_iterator x(start, argsStr.end(), re1, -1), x1;  

我在这个示例中使用了std::regex,但它也适用于boost。另外,我使用raw string literal来提高可读性,如果它甚至是正则表达式的话。