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

如何使用正则表达式从‘1903type18pieces’中删除‘18pieces’且保留开头数字

原正则失效原因

你写的re.sub("(?<!\d+)\d.+?$", "", string)无法生效有两个核心问题:

  1. Python标准re库不支持可变长度的逆序环视,(?<!\d+)中的+属于不定长匹配,本身就不符合语法要求
  2. 匹配逻辑存在缺陷,即使支持不定长逆序环视,也无法准确区分「开头连续的数字段」和「后续出现的数字」

正确解决方案

方案1:匹配提取保留内容(逻辑最直观)

直接从字符串开头匹配需要保留的内容,提取匹配结果即可:

import re

def trim_str(s):
    # ^ 匹配开头,\d* 匹配开头所有连续数字,\D* 匹配数字后所有非数字字符(直到碰到下一个数字为止)
    res = re.match(r'^\d*\D*', s)
    return res.group() if res else ''

方案2:替换删除无效内容(适合一行写完的场景)

如果习惯用sub直接替换删除,用如下写法即可:

import re

# (?<=\D) 限定匹配的数字前面是非数字,不会命中开头的数字,\d.* 匹配该数字及之后的全部内容
result = re.sub(r'(?<=\D)\d.*', '', your_string)

效果验证

  • 输入1903type18pieces → 输出1903type,符合需求
  • 输入12345 → 输出12345,全开头数字的场景完整保留
  • 输入type789test → 输出type,无开头数字的场景下删除首个数字及后续内容
  • 输入2024abcdef → 输出2024abcdef,后续无数字的场景完整保留

内容的提问来源于stack exchange,提问作者Z.Shuang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:15:05