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

