Code:
#include <stdio.h>
int main() {
char line[] = "decoder: #(45+HDR)-6";
char line_spaced[] = " decoder : # ( 45 + HDR ) - 6 ";
char fmt[] = " %31[^: ] : # ( %31[^+- ] %c %31[^) ] ) %c %31s";
char a[32], b[32], c[32], d[32], op1, op2; // a : # ( b op1 c ) op2 d
int m;
*a=*b=*c=*d=0; op1=op2='X';
m=sscanf(line, fmt, a, b, &op1, c, &op2, d);
printf("[%d] %s, %s, %c, %s, %c, %s\n", m, a, b, op1, c, op2, d);
*a=*b=*c=*d=0; op1=op2='X';
m=sscanf(line_spaced, fmt, a, b, &op1, c, &op2, d);
printf("[%d] %s, %s, %c, %s, %c, %s\n", m, a, b, op1, c, op2, d);
return 0;
}