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

如何使用Python正则表达式仅删除星号包裹内容中的数字

问题原因

你原来使用的正则\*.*\*会直接匹配一对星号之间的全部内容,直接替换为空自然会把星号包裹的所有内容都清空。要实现仅删除星号内的数字、保留星号外数字的需求,需要用嵌套替换的逻辑实现。


正确实现代码

import re
msg = """
    1 x * Build your pizza * ($ 99MXN)
    1 x * Baitz Cinnamon 16 pieces * ($ 44.50 MXN)
    1 x * Potatoes 220 g * ($ 44.50 MXN) """

# 外层匹配所有星号包裹的片段,内层单独删除片段内的数字
res = re.sub(r'\*(.*?)\*', lambda match: f'*{re.sub(r"\d+", "", match.group(1))}*', msg)
print(res)

代码说明

  • 外层正则\*(.*?)\*用非贪婪匹配,精准定位每一对星号包裹的内容,不会出现跨段匹配的问题
  • 替换回调函数中,仅对星号内部的内容执行数字删除操作,处理完成后再把星号加回去,完全不影响星号外的所有内容
  • 数字匹配规则\d+只会匹配连续的数字字符,不会影响文字、空格等其他内容

运行输出

1 x * Build your pizza * ($ 99MXN)
    1 x * Baitz Cinnamon  pieces * ($ 44.50 MXN)
    1 x * Potatoes  g * ($ 44.50 MXN) 

内容的提问来源于stack exchange,提问作者CAPOH A.C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:27:08