How about:
select regexp_replace('71.09.6.01.3', '(\d)[.-]', '\1', 'g');
?
In your example, the (\d)[.-](\d) says find a digit followed by a period or dash followed by another digit. The first time through 1.0 is matched and replaced with 10 (710) with the "current location" pointing before the 9. Go again and 9.6 is replaced by 96 for (71096) with the "current location" pointing to the period! So ".0" doesn't match. (71096.0) next match is 1.3 and result is 13 ( 71096.013). If you don't want to eliminate the period or dash unless it is _between_ two digits, try:
select regexp_replace('71.09.6.01.3', '(\d)[.-](?=\d)', '\1', 'g');
(?=\d) is a "look ahead") match which says that the period or dash must be followed by a digit, but the expression _does not_ "consume" the digit matched.