Вам нужно быть более хитрым в регулярном выражении и использовать другую замену.
regsub -all {(\S)\s(?=\S)} $a {\1_}
Регулярное выражение сопоставляет (и захватывает) непробельный символ, за которым следует пробел, а затем требует (с опережением ограничение), что следующий символ не является пробелом и не соответствует ему. Он заменяется первым совпавшим символом (заменяя его самим собой) и подчеркиванием.
Обычно для такого рода вещей вы бы использовали \y\s\y
→ _
, но это не так. t работает в вашем случае использования, потому что он не обрабатывает 0.002 &
правильно (&
не является символом слова).
Если бы механизм RE Tcl поддерживал ограничения просмотра назад (это не так), это было бы намного проще решить, так как вам не потребуется трюк с заменой символа перед пробелом на себя.