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

Python正则表达式:保留特定子串数字,移除其余数字

修正后的正则表达式解决方案

你的核心问题是原正则只考虑了数字后面跟着目标子串的情况(比如1s、2s),但没处理s4这种数字前面有特定前缀的场景,导致s4里的4被误删。

修正后的正则

import re

s = "a61s8sa92s3s3as4s4af3s"
pattern = r"(?!(?<=s)4)(?!(1|2|3)s)[0-9]"
result = re.sub(pattern, "", s)
print(result)  # 输出: a1s sa2s3s as4s4af3s

正则逻辑解释

这个正则通过双重负向环视精准排除需要保留的数字:

  • (?!(?<=s)4):排除前面是s的4(也就是s4里的4)
  • (?!(1|2|3)s):排除后面跟着s的1、2、3(也就是1s、2s、3s里的数字)
  • [0-9]:匹配所有数字,只有当上述两个排除条件都不满足时,才会被匹配并删除

匹配验证

针对你的测试字符串:

  • 被删除的数字:6、8、9、3(单独的那个3)
  • 被保留的数字:1(属于1s)、2(属于2s)、3(属于3s)、4(两个都属于s4)

最终结果和你的预期一致(若你期望数字移除后替换为空格,只需把re.sub的第二个参数改成" "即可)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:01:07