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

如何在Python中按含数据计数的特殊分隔符分割字符串

解决Python特殊格式字符串分割问题

核心思路

先定义类型码与对应字段的映射关系,再从字符串头部开始循环提取「2位类型码+2位长度值+对应长度的内容」,直到字符串处理完毕,最后按指定格式拼接结果,缺失字段用空格占位。

具体实现代码

def parse_special_string(s):
    # 定义类型码和对应字段的映射,可根据实际需求调整
    type_mapping = {
        'PN': 'street',
        '00': 'city',
        '01': 'state',
        '02': 'zipcode'
    }
    # 初始化结果字典,所有字段默认空字符串
    result = {field: '' for field in type_mapping.values()}
    
    index = 0
    total_len = len(s)
    # 循环处理字符串,每次处理一组类型+长度+内容
    while index <= total_len - 4:
        # 提取2位类型码
        type_code = s[index:index+2]
        index += 2
        # 提取2位长度并转为整数
        try:
            length = int(s[index:index+2])
        except ValueError:
            # 若长度不是数字,跳过当前片段
            index += 2
            continue
        index += 2
        
        # 提取对应长度的内容
        if index + length <= total_len:
            content = s[index:index+length]
            if type_code in type_mapping:
                result[type_mapping[type_code]] = content
            index += length
        else:
            # 剩余字符不足,终止循环
            break
    
    # 按要求格式拼接,处理缺失字段的空格占位
    street = result['street']
    city = result['city'] if result['city'] else ' '
    state_zip = f"{result['state']} {result['zipcode']}".strip()
    formatted = f"{street}, {city}, {state_zip}"
    # 修正多余空格(比如city为空时的连续空格)
    formatted = formatted.replace(' , ', ', ')
    return formatted

# 测试示例
test_str = "PN1121 E 1st St0008New York0102NY020510003"
print(parse_special_string(test_str))  # 输出: 21 E 1st St, New York, NY 10003

# 测试缺失城市的情况
test_str_no_city = "PN1121 E 1st St0102NY020510003"
print(parse_special_string(test_str_no_city))  # 输出: 21 E 1st St,  , NY 10003

代码说明

  • 类型映射:type_mapping中定义了每种2位类型码对应的字段名称,方便后续归类存储,可根据实际业务需求新增或修改类型码。
  • 循环处理逻辑:从字符串起始位置逐步推进索引,每次截取类型码、长度值和对应内容,遇到无效长度时自动跳过当前片段。
  • 格式调整:拼接时对缺失字段做空格占位处理,同时修正多余空格,确保输出格式符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:47:44