\d+\.?\d*|\.\d+(?=\s*ch)
Aplicado ao "Sta.23.5 .1 Palavras 67,89 CH" captura 23.5 primeiro porque corresponde \d+\.?\d*
O ou "|" Tem a maior precedência, se você quiser pensar assim, dividindo o padrão em duas partidas possíveis: \d+\.?\d*
e \.\d+(?=\s*ch)
Se você quiser prevenir \d+\.?d*
A partir da correspondência 23.5, você precisaria adicionar critérios extras, como exigir um personagem espacial antes dele e usar a captura de parênteses para obter o número como envio: \s(\d+\.?\d*)
Você pode combinar com este padrão, \s(\d+\.?\d*)|\.\d+(?=\s*ch)
, mas lembre -se de que, se o primeiro tempo corresponder, você estaria olhando para as subtidas para obter o valor real.
O verdadeiro problema aqui é que a classe REGEXP do VBScript não suporta o LookBehind, apenas Lookahead.