gpt4 book ai didi

c++ - 正则表达式从大括号构建 vector

转载 作者:行者123 更新时间:2023-11-30 01:55:54 27 4
gpt4 key购买 nike

我想将 std::string 转换为:

"{1, 2}, {one, two}, {123, onetwothree}"

进入 std::stringsstd::pairsstd::vector 看起来像这样:

std::vector<std::pair<std::string, std::string>> v = {{"1", "2"}, {"one", "two"}, {"123", "onetwothree"}};
// where, for instance
v[0] == std::make_pair("1", "2"); // etc.

这似乎是原始 std::string 可以使用 std::regex 最容易地解析的情况,但我不是正则表达式专家(或新手),更不用说 std::regex 专家。这里的食谱有什么想法吗?

最佳答案

目前,<regex>不适用于 GCC ,这里是一个提升版本,用 -lboost_regex 编译.

boost capture适合这种情况,但默认情况下未启用。

这是原帖:Boost C++ regex - how to get multiple matches

#include <iostream>
#include <string>
#include <boost/regex.hpp>

using namespace std;

int main()
{
string str = "{1, 2}, {one, two}, {123, onetwothree}";

boost::regex pair_pat("\\{[^{}]+\\}");
boost::regex elem_pat("\\s*[^,{}]+\\s*");

boost::sregex_token_iterator end;

for(boost::sregex_token_iterator iter(str.begin(), str.end(), pair_pat, 0);
iter != end; ++iter) {

string pair_str = *iter;
cout << pair_str << endl;

for (boost::sregex_token_iterator it(pair_str.begin(), pair_str.end(), elem_pat, 0);
it != end; ++it)
cout << *it << endl;
}

return 0;
}

关于c++ - 正则表达式从大括号构建 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20247009/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com