我有以下代码来提取左侧&右侧部分来自
类型的字符串[3→1],[2→2],[5→3]
我的代码如下所示
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main()
{
regex expr("([[:d:]]+)->([[:d:]]+)");
string input = "[3->1],[2->2],[5->3]";
const std::sregex_token_iterator end;
int submatches[] = { 1, 2 };
string left, right;
for (std::sregex_token_iterator itr(input.begin(), input.end(), expr, submatches); itr != end;)
{
left = ((*itr).str()); ++itr;
right = ((*itr).str()); ++itr;
cout << left << " " << right << endl;
}
}
输出
3 1
2 2
5 3
现在我试图扩展它,以便第一部分将是一个字符串而不是数字。例如,输入将是
[(3),(5),(0,1) - →2],[(32,2) - →6],[(27),(61,11) - →1]
我需要将其拆分为
(3),(5),(0,1) 2
(32,2) 6
(27),(61,11) 1
我尝试("(\\(.*+)->([[:d:]]+)")
的基本表达式只是将整个字符串拆分为两个
(3),(5),(0,1)->2],[(32,2)->6],[(27),(61,11) 1
有人可以就如何实现这一点给我一些建议吗?感谢所有帮助。
答案 0 :(得分:2)
你需要在第一个'['之后获得所有内容,除了“ - &gt;”之外,有点像if 你正在为多行注释/ * ... * /做一个正则表达式,其中必须排除“* /”,否则正则表达式变得贪婪并吃掉所有内容直到最后一个,就像在你的情况下发生的那样“ - &gt;”中。你不能真正将点用于任何char,因为它非常贪婪。
这对我有用:
\\[([^-\\]]+)->([0-9]+)\\]
在[...]开始时的'^'使得除了' - '之外的所有字符,所以你可以避免接受“ - &gt;”和']'
答案 1 :(得分:2)