fork download
  1. #include <iostream>
  2. #include <regex>
  3. using namespace std;
  4.  
  5. // http://es.stackoverflow.com/q/53350/127
  6.  
  7. int main() {
  8. string texto("48A30B50C,1A,1A1B1C,11111A,1C1B1A,1A1A1A,1C,1B,1443C,adfank,12322134445688,48A");
  9. regex patron(R"/((?:^|,)(?=\d)(?:(\d+)(A))?(?:(\d+)(B))?(?:(\d+)(C))?(?=,|$))/");
  10.  
  11. //Iterar cada una de las coincidencias
  12. sregex_iterator next(texto.begin(), texto.end(), patron);
  13. sregex_iterator end;
  14. while (next != end) {
  15. smatch match = *next;
  16.  
  17. //Coincidencia global (incluye la coma)
  18. cout << "Valor: " << match.str() << endl;
  19.  
  20. //Iterar cada uno de los grupos (saltando de a 2)
  21. for( int grupo = 1; grupo < match.size(); grupo += 2 ) {
  22. string numero = match[grupo];
  23. string letra = match[grupo+1];
  24.  
  25. //Está el grupo o devolvió una cadena vacía por ser opcional?
  26. if (!letra.empty()) {
  27. cout << "\tNúmero: " << numero << endl
  28. << "\tLetra: " << letra << endl;
  29. }
  30. }
  31. next++;
  32. }
  33. }
Success #stdin #stdout 0s 16168KB
stdin
Standard input is empty
stdout
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