\d+\.?\d*|\.\d+(?=\s*ch)
Применяется к «STA.23.5 .1 Слова 67.89 CH». Сначала захватывает 23,5, потому что это соответствует \d+\.?\d*
Или "|" Имеет самый высокий приоритет, если вы хотите думать об этом так, разделяя шаблон на два возможных матча: \d+\.?\d*
а также \.\d+(?=\s*ch)
Если вы хотите предотвратить \d+\.?d*
От сопоставления 23,5 вам придется добавить дополнительные критерии, например, требует космического персонажа перед ним и использование захвата скобков, чтобы получить число в качестве подводного соглашения: \s(\d+\.?\d*)
Вы можете сопоставить оба с этим шаблоном, \s(\d+\.?\d*)|\.\d+(?=\s*ch)
, но имейте в виду, что если первая половина соответствует, вы будете смотреть на подборки для фактического значения.
Настоящая проблема здесь заключается в том, что класс Regexp VBScript не поддерживает LOUSTBEHIND, просто Lookahead.