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

Python提取字符串中9位数字前子串的通用方法

实现方案

核心逻辑是拿字符串里固定9位长度的连续数字作为定位锚点,截取锚点前的内容并清理末尾多余的分隔下划线,可同时适配两类测试场景,不会因为前缀里包含下划线就匹配失效。

正则实现(最简洁)

直接用标准库re匹配第一个出现的9位连续数字,按匹配位置切片即可:

import re

def get_prefix(file_name: str) -> str:
    num_match = re.search(r"\d{9}", file_name)
    if not num_match:
        # 无符合要求的9位数字时的兜底逻辑,可按业务需求调整
        return ""
    return file_name[:num_match.start()].rstrip("_")

效果验证

  • 测试输入1:place1_128017000_gw_cl_mask.tif,匹配到9位数字的起始位置为索引7,切片后得到place1_,清理末尾下划线后输出place1,符合预期。
  • 测试输入2:place1_place2_128017000_gw_cl_mask.tif,匹配到9位数字的起始位置为索引14,切片后得到place1_place2_,清理末尾下划线后输出place1_place2,符合预期。

无正则依赖实现

如果不想使用正则模块,也可以通过滑动窗口遍历字符串找连续9位数字的位置,逻辑和正则版本完全一致:

def get_prefix_no_re(file_name: str) -> str:
    str_len = len(file_name)
    # 滑动窗口遍历,窗口大小固定为9
    for idx in range(str_len - 8):
        if file_name[idx:idx+9].isdigit():
            return file_name[:idx].rstrip("_")
    return ""

注意:不要使用split('_')[0]这类硬编码分隔段位置的写法,只要前缀部分多包含下划线分隔的内容就会匹配错误,鲁棒性远低于锚点定位的实现逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:54:15