Попробуйте это регулярное выражение:
(?<=\D|^)\.|\.(?=\D|$)
и замените на -
.
Объяснение:
Существует только 4 случая, когда вы хотите сопоставить точку:
- перед точкой стоит не цифра
- точка является началом строки
- после точки стоит не цифра
- точка является концом строки
Регулярное выражение находит только все четыре случая.
Как предложил Revo вкомментарии, это можно упростить до:
(?<!\d)\.|\.(?!\d)
Если lookbehind не поддерживается вашим движком регулярных выражений, вы можете заменить их на группы:
(\D|^)\.|\.(\D|$)
и заменить на $1-$2
.