对于此字符串[268, 950][268, 954][269, 955][272, 955][270, 955][268, 953]
我希望逐对[ , ]
对数字。
我使用c ++ regex_search来解析这个字符串。
这是我的测试代码:
ifstream file("output.txt");
char regex_base[] = "[\\[0-9, 0-9\\]]{10}";
char regex_num[] = "[0-9]{3}";
regex reg_base(regex_base, regex_constants::icase);
regex reg_num(regex_base, regex_constants::icase);
if (file.is_open())
{
string s;
while (!file.eof()){
getline(file, s);
smatch m;
while (regex_search(s, m, reg_num)) {
for (int i = 0; i < m.size(); i++)
cout << m[i] << endl;
}
}
}
但在while
的{{1}}中,变量regex_search()
只能获得[268,950]并且它会产生无限循环。
我的正则表达式或我的代码中出了什么问题?
答案 0 :(得分:0)
我删除了捕获组,因为你似乎还没有使用它们,并添加了一些代码来展示如何从输入字符串中获取匹配项:
char regex_base[] = "\\[[0-9]+, [0-9]+\\]";
...
s = "[268, 950][268, 954][269, 955][272, 955][270, 955][268, 953]"; // FOR TEST
smatch m;
while (regex_search(s, m, reg_num))
{
for (auto x:m) std::cout << x << "\r\n";
s = m.suffix().str();
}
输出:
如果您需要这些值,可以使用不同的正则表达式:
char regex_base[] = "\\[([0-9]+), ([0-9]+)\\]";
...
s = "[268, 950][268, 954][269, 955][272, 955][270, 955][268, 953]";
smatch m;
while (regex_search(s, m, reg_num))
{
std::cout << m[1] << ", " << m[2] << std::endl;
s = m.suffix().str();
}