gpt4 book ai didi

c++ - 在一个 std::string 中多次匹配正则表达式

转载 作者:行者123 更新时间:2023-12-05 04:55:48 24 4
gpt4 key购买 nike

从今天出现的代码开始,我们输入的可能是几个包的列表。

"3 drab lime bags, 1 drab plum bag, 2 vibrant tomato bags, 1 plaid blue bag."; 这样的字符串例如在我的输入中。

我为解决此问题所做的工作:将其拆分为 ',' , 然后申请 std::regex bag_regex("([0-9]+) (\\w+ \\w+) bag");到这些子字符串中的每一个。

现在我尝试了是否可以一次完成,并尝试使用 https://en.cppreference.com/w/cpp/regex/regex_token_iterator相反。

示例代码:

std::string test = "3 drab lime bags, 1 drab plum bag, 2 vibrant tomato bags, 1 plaid blue bag.";
std::regex bag_regex_it("[0-9]+ \\w+ \\w+");

std::copy(std::sregex_token_iterator(test.begin(), test.end(), bag_regex_it, -1),
std::sregex_token_iterator(),
std::ostream_iterator<std::string>(std::cout, "\n"));

我在输出中实际得到的是:

 bags,
bag,
bags,
bag.

有什么方法可以让它成组(数量和颜色描述)?我的猜测是正确使用 lambda 在这里会有所帮助,但我不知道该怎么做。理想的结果是 std::vector喜欢std::pair<int, std::string>包含已解析的信息,但这段代码超出了我的范围。

最佳答案

您可以使用 regex_token_iterator 中的最后一个参数作为子组数组(考虑您想要的 2 个组(数字和颜色))。

以下代码片段不进行任何错误检查并假定您输入的字符串是有效的:

using Pair = std::pair<int, std::string>;
Pair p;
const int subgroups[] = {1,2};
std::vector < Pair> results; // Your desired result
std::regex_token_iterator<std::string::iterator> c
{ test.begin(), test.end(), regex_it, subgroups };
std::regex_token_iterator<std::string::iterator> rend;

while (c!=rend) {
// Do some sort of error handling here
p.first = std::stoi(*c++);
p.second = *c++;
results.push_back(p);
}

std::cout << results.size(); // 4

Demo here

关于c++ - 在一个 std::string 中多次匹配正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65182174/

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