\d+\.?\d*|\.\d+(?=\s*ch)
Applicato a "Sta.23.5 .1 parole 67,89 ch" cattura prima 23,5 perché corrisponde \d+\.?\d*
O "|" ha la massima precedenza, se vuoi pensarci così, dividendo il modello in due possibili partite: \d+\.?\d*
e \.\d+(?=\s*ch)
Se vuoi prevenire \d+\.?d*
Dalla corrispondenza 23.5, dovresti aggiungere un criterio extra, come richiedere un carattere spaziale prima di esso e usare la cattura della parentesi per ottenere il numero come sottoposto \s(\d+\.?\d*)
Potresti abbinare entrambi con questo modello, \s(\d+\.?\d*)|\.\d+(?=\s*ch)
, ma tieni presente che se la prima metà corrispondesse vedresti i sottogruppi per il valore effettivo.
Il vero problema qui è che la classe Regexp di VBScript non supporta lookbehind, basta lookahead.