Como posso usar o regex para resolver isso?

Eu tenho duas strings que eu preciso extrair dados, mas não consigo conseguir funcionar. Gostaria de conhecer uma expressão regular, mas infelizmente não. Eu li alguns tutoriais iniciantes, mas não consigo encontrar uma expressão que faça o que eu preciso.

Fora desta primeira cadeia delimitada pelo personagem igual, preciso ignorar os primeiros 6 caracteres e pegar os seguintes 9 caracteres. Após o personagem igual, preciso pegar os primeiros 4 caracteres que são dia e ano. Por fim, para essa string, eu preciso dos números restantes, que é uma data em YYYYmmdd.

636014034657089=130719889904 

A segunda string parece um pouco mais difícil porque os espaços entre os personagens diferem, mas sempre parecem ser delimitados pelo mínimo, um único espaço. Às vezes, existem até 15 ou 20 espaços que separam os blocos de dados.

Aqui estão duas amostras diferentes que mostram a diferença de espaço.

 !!92519 C 01 M600200BLNBRN D55420090205M1O !!95815 A M511195BRNBRN D62520070906 ":%/]Q2#0*& 

Os dados que eu preciso dessas duas últimas strings são:

 The zip code following the 2 exclamation marks. The single letter 'M' following that. It always appears to be in a 13 character block The 3 numbers after the single letter The next 3 numbers which are the person's height The following next 3 are the person's weight The next 3 are eye color The next block of 3 which are the person's hair color 

O último bloco do qual eu preciso de dados:

Eu preciso obter a única letra que no exemplo parece ser um ‘D’. Pular os próximos 3 números O último e os restantes 8 números, que é uma data em AAAAA.

Se alguém pudesse me ajudar a resolver isso, ficaria muito grato.

Para a primeira string, você pode usar essa expressão regular:

 ^[0-9]{6}([0-9]{9})=([0-9]{4})([0-9]{4})([0-9]{2})([0-9]{2})$ 

Explicação:

 ^ Início da corda / linha
 [0-9] {6} Combina os 6 primeiros dígitos
 ([0-9] {9}) Capture os próximos 9 dígitos
 = Corresponder um sinal de igual
 ([0-9] {4}) Capture o "dia e ano" (em que formato está este?)
 ([0-9] {4}) Capture o ano
 ([0-9] {2}) Capture o mês
 ([0-9] {2}) Capture a data
 $ Fim da corda / linha

Para o segundo:

 ^!!([0-9]{5}) +.*? +M([0-9]{3})([0-9]{3})([AZ]{3})([AZ]{3}) +([AZ])[0-9]{3}([0-9]{4})([0-9]{2})([0-9]{2}) 

Rubular

Funciona de forma semelhante à primeira. Talvez você precise ajustá-lo ligeiramente se seus dados não estiverem exatamente no formato que a expressão regular espera. Você pode querer replace o .*? com algo mais preciso, mas não tenho certeza do que, porque você não descreveu o formato das partes em que não está interessado.