Python中如何移除字符串除最后一个小数点外的其余点并保留小数部分
移除字符串中除最后一个小数点外的所有点
需求说明
给定若干字符串,需要移除**最后一个小数点(作为小数分隔符)**之外的所有点,保留该小数点及其后的数字。
示例输入:
"8.2" "88.2" "888.2" "8.888.2" "8.888.888.2"
期望输出:
"8.2" "88.2" "888.2" "8888.2" "8888888.2"
解决方案
方法一:字符串拆分拼接(直观易懂)
核心思路是找到最后一个小数点的位置,把字符串拆成「小数点前的部分」和「小数点及之后的部分」,将前半部分的所有点移除后,再和后半部分拼接。
以Python为例:
def clean_extra_dots(s): last_dot_pos = s.rfind('.') if last_dot_pos == -1: return s # 前半部分去点,后半部分保留原样 return s[:last_dot_pos].replace('.', '') + s[last_dot_pos:] # 测试示例 test_cases = [ "8.2", "88.2", "888.2", "8.888.2", "8.888.888.2" ] for case in test_cases: print(f'"{clean_extra_dots(case)}"')
方法二:正则表达式替换(简洁高效)
用正则匹配所有「后面还存在小数点」的点,直接替换为空,剩下的就是最后一个需要保留的小数点。
以JavaScript为例:
const testCases = [ "8.2", "88.2", "888.2", "8.888.2", "8.888.888.2" ]; testCases.forEach(str => { const result = str.replace(/\.(?=.*\.)/g, ''); console.log(`"${result}"`); });
正则解释:\.(?=.*\.) 里的(?=.*\.)是正向预查,确保当前匹配的小数点后面还有至少一个小数点,精准定位所有需要移除的多余点。
内容的提问来源于stack exchange,提问作者Va SA
相关产品推荐
相关产品推荐

