Вот моя попытка :
(?:[.][0-9]*[1-9])(0+)$|([.]0+$)
Предполагается, что входная строка на самом деле является числом (она не защитит от таких вещей, как xyz.001). Он не будет совпадать вообще, если после десятичной запятой нет завершающих нулей; и, если есть, он удаляет:
- последовательность
0
с, перед которой стоит [1-9]
после [.][0-9]*
или
a [.]
с последующей последовательностью 0
с.
Результат всегда будет в захваченной группе, если регулярное выражение совпадает.