You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何替换指定特殊字符,仅保留数字中的小数点?

解决保留数字内小数点的特殊字符替换问题

问题分析

你当前的循环替换逻辑会把所有小数点(包括数字里的2.4中的.)都替换掉,而尝试的正则仅处理了部分标点,未覆盖所有需要替换的字符。核心需求是区分数字上下文的小数点和其他冗余特殊字符,只替换后者。

解决方案

构造包含分支规则的正则表达式,实现两个核心匹配逻辑:

  1. 仅替换不处于数字前后的小数点:用负向断言确保小数点左右无数字
  2. 替换所有指定的其他特殊字符:注意正则元字符需转义

完整代码示例

import re

def clean_description(description):
    # 正则规则:要么匹配非数字上下文的小数点,要么匹配指定特殊字符
    regex_pattern = r'(?<!\d)\.(?!\d)|[\(\)\{\}\[\]\*;?/\'\-&!,"]'
    # 替换匹配字符为空格
    cleaned = re.sub(regex_pattern, " ", description.strip())
    # 合并连续空格并去除首尾空格
    cleaned = re.sub(r'\s+', ' ', cleaned).strip()
    return cleaned

# 测试用例验证
test_cases = [
    "{2.4 oz/week.}",
    "[yearly.]",
    "(Current every day);"
]

for case in test_cases:
    print(f"输入: {case} → 输出: {clean_description(case)}")

测试结果

运行后输出完全符合期望:

输入: {2.4 oz/week.} → 输出: 2.4 oz week
输入: [yearly.] → 输出: yearly
输入: (Current every day); → 输出: Current every day

正则规则说明

  • (?<!\d)\.(?!\d):负向断言,仅匹配左右都不是数字的小数点,保留数字内的小数点
  • [\(\)\{\}\[\]\*;?/\'\-&!,"]:字符集,包含所有需要替换的特殊字符,已对正则元字符(如(、*、[等)做转义处理

内容的提问来源于stack exchange,提问作者jengacode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 01:42:23