#include <iostream>
#include <regex>
using namespace std;
// http://es.stackoverflow.com/q/53350/127
int main() {
string texto("48A30B50C,1A,1A1B1C,11111A,1C1B1A,1A1A1A,1C,1B,1443C,adfank,12322134445688,48A");
regex patron(R"/((?:^|,)(?=\d)(?:(\d+)(A))?(?:(\d+)(B))?(?:(\d+)(C))?(?=,|$))/");
//Iterar cada una de las coincidencias
sregex_iterator next(texto.begin(), texto.end(), patron);
sregex_iterator end;
while (next != end) {
smatch match = *next;
//Coincidencia global (incluye la coma)
cout << "Valor: " << match.str() << endl;
//Iterar cada uno de los grupos (saltando de a 2)
for( int grupo = 1; grupo < match.size(); grupo += 2 ) {
string numero = match[grupo];
string letra = match[grupo+1];
//Está el grupo o devolvió una cadena vacía por ser opcional?
if (!letra.empty()) {
cout << "\tNúmero: " << numero << endl
<< "\tLetra: " << letra << endl;
}
}
next++;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cmVnZXg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBodHRwOi8vZXMuc3RhY2tvdmVyZmxvdy5jb20vcS81MzM1MC8xMjcKCmludCBtYWluKCkgewoJc3RyaW5nIHRleHRvKCI0OEEzMEI1MEMsMUEsMUExQjFDLDExMTExQSwxQzFCMUEsMUExQTFBLDFDLDFCLDE0NDNDLGFkZmFuaywxMjMyMjEzNDQ0NTY4OCw0OEEiKTsKCXJlZ2V4IHBhdHJvbihSIi8oKD86XnwsKSg/PVxkKSg/OihcZCspKEEpKT8oPzooXGQrKShCKSk/KD86KFxkKykoQykpPyg/PSx8JCkpLyIpOwoJCgkvL0l0ZXJhciBjYWRhIHVuYSBkZSBsYXMgY29pbmNpZGVuY2lhcwoJc3JlZ2V4X2l0ZXJhdG9yIG5leHQodGV4dG8uYmVnaW4oKSwgdGV4dG8uZW5kKCksIHBhdHJvbik7CglzcmVnZXhfaXRlcmF0b3IgZW5kOwoJd2hpbGUgKG5leHQgIT0gZW5kKSB7CgkJc21hdGNoIG1hdGNoID0gKm5leHQ7CgkJCgkJLy9Db2luY2lkZW5jaWEgZ2xvYmFsIChpbmNsdXllIGxhIGNvbWEpCgkJY291dCA8PCAiVmFsb3I6ICIgPDwgbWF0Y2guc3RyKCkgPDwgZW5kbDsKCQkKCQkvL0l0ZXJhciBjYWRhIHVubyBkZSBsb3MgZ3J1cG9zIChzYWx0YW5kbyBkZSBhIDIpCgkJZm9yKCBpbnQgZ3J1cG8gPSAxOyBncnVwbyA8IG1hdGNoLnNpemUoKTsgZ3J1cG8gKz0gMiApIHsKCQkJc3RyaW5nIG51bWVybyA9IG1hdGNoW2dydXBvXTsKCQkJc3RyaW5nIGxldHJhICA9IG1hdGNoW2dydXBvKzFdOwoJCQkKCQkJLy9Fc3TDoSBlbCBncnVwbyBvIGRldm9sdmnDsyB1bmEgY2FkZW5hIHZhY8OtYSBwb3Igc2VyIG9wY2lvbmFsPwoJCQlpZiAoIWxldHJhLmVtcHR5KCkpIHsKCQkJCWNvdXQgPDwgIlx0TsO6bWVybzogIiA8PCBudW1lcm8gPDwgZW5kbAoJCQkJCSA8PCAiXHRMZXRyYTogICIgPDwgbGV0cmEgPDwgZW5kbDsKCQkJfQoJCX0KCQluZXh0Kys7Cgl9Cn0=
Valor: 48A30B50C
Número: 48
Letra: A
Número: 30
Letra: B
Número: 50
Letra: C
Valor: ,1A
Número: 1
Letra: A
Valor: ,1A1B1C
Número: 1
Letra: A
Número: 1
Letra: B
Número: 1
Letra: C
Valor: ,11111A
Número: 11111
Letra: A
Valor: ,1C
Número: 1
Letra: C
Valor: ,1B
Número: 1
Letra: B
Valor: ,1443C
Número: 1443
Letra: C
Valor: ,48A
Número: 48
Letra: A