Si tratta di poche righe di C ...

Non specifico gli include ...

Per avere solo le cifre

codice:
char *string1 = "P12Y34M54DT87H38m29S"; 
char *s, c;
unsigned int i, j;

s = (char *)malloc(strlen(string1)+1);
for(i=j=0; i<strlen(string1); i++)
{
  c = *(string1+i);
  if(isdigit(c))
  {
    *(s+j) = c;
    j++;
  }
}
*(s+j)=0;

printf("%s\n", s);
P.S. Solo per curiosita' ... ma cosa sono le "difficoltà limitative" ...