【发布时间】:2020-08-08 00:09:41
【问题描述】:
我的问题或多或少是不言自明的,我想编写一个正则表达式来解析用户通过控制台输入的字符串中的数字。我使用以下方式获取用户输入:
getline(std::cin,stringName); //1 2 3 4 5
我假设用户输入了 N 个数字,后跟空格,最后一个数字除外。 我已经通过像这样分析字符串 char 来解决这个问题:
std::string helper = "";
std::for_each(stringName.cbegin(), strinName.cend(), [&](char c)
{
if (c == ' ')
{
intVector.push_back(std::stoi(helper.c_str()));
helper = "";
}
else
helper += c;
});
intVector.push_back(std::stoi(helper.c_str()));
我想通过使用正则表达式来实现相同的行为。我写了以下代码:
std::regex rx1("([0-9]+ )");
std::sregex_iterator begin(stringName.begin(), stringName.end(), rx1);
std::sregex_iterator end;
while (begin != end)
{
std::smatch sm = *begin;
int number = std::stoi(sm.str(1));
std::cout << number << " ";
}
这个正则表达式的问题发生在它到达最后一个数字时,因为它后面没有空间,因此它进入了一个无限循环。有人可以告诉我如何解决这个问题吗?
【问题讨论】:
-
您可以使用
std::regex rx1("[0-9]+(?: |$)");然后sm.str(),或std::regex rx1("([0-9]+)(?: |$)");然后sm.str(1)来获取数字
标签: c++ regex string parsing regex-group