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
相关产品推荐
相关产品推荐

