\d+\.?\d*|\.\d+(?=\s*ch)
aplicado a "Sta.23.5 .1 Palabras 67.89 CH" captura 23.5 primero porque coincide \d+\.?\d*
El o "|" tiene la mayor precedencia, si quieres pensar en ello, dividiendo el patrón en dos posibles partidos: \d+\.?\d*
y \.\d+(?=\s*ch)
Si quieres prevenir \d+\.?d*
Desde que coinciden 23.5, tendría que agregar un criterio adicional, como requerir un personaje espacial antes y usar la captura de paréntesis para obtener el número como un submatch: \s(\d+\.?\d*)
Podrías coincidir con este patrón, \s(\d+\.?\d*)|\.\d+(?=\s*ch)
, pero tenga en cuenta que si la primera mitad coincide, estaría mirando los submatches para el valor real.
El verdadero problema aquí es que la clase Regexp de VBScript no es compatible con lookbehind, solo lookhead.