如何基于状态列表分割目标字符串?技术实现问询
解决方案:提取并分割匹配的状态字段
没问题,我来帮你实现这个需求!核心思路是先处理空字符串的边界情况,再遍历状态列表匹配目标字段,最后完成分割/提取操作。以下是具体的Python实现和说明:
步骤说明
- 处理空字符串:先检查目标字段
snip[0][3]是否为空,避免后续逻辑报错 - 匹配状态:遍历你的状态列表,检查每个状态是否存在于目标字段中
- 分割字符串:提取所有匹配的状态,可选保留剩余未匹配的文本部分
完整代码实现
def extract_and_split_statuses(snip, status_list): # 容错处理:确保snip格式正确,取出目标字段 target_str = "" if snip and len(snip) > 0 and len(snip[0]) > 3: target_str = snip[0][3].strip() # 处理空字符串情况 if not target_str: return [], None # 返回空匹配列表和None表示无剩余内容 # 收集所有匹配的状态 matched_statuses = [] remaining_text = target_str for status in status_list: if status in remaining_text: matched_statuses.append(status) # 从剩余文本中移除已匹配的状态,避免重复匹配(可选) remaining_text = remaining_text.replace(status, "").strip() # 如果剩余文本为空,返回None remaining_text = remaining_text if remaining_text else None return matched_statuses, remaining_text # 你的状态列表 statuses = ['421-A','421-G','ARTICLE 11','ARTICLES 14 & 15', 'COOP/CONDO PLAN FILE','EVICT COOP/CONDO', 'GARDEN COMPLEX','J-51','NON-EVICT COOP/CONDO','ROOMING HOUSE','SEC 608'] # 测试示例1:包含多个匹配状态 snip1 = [('11201', '131', 'MULTIPLE DWELLING A', '421-A ARTICLE 11', '291', '45')] matched1, remaining1 = extract_and_split_statuses(snip1, statuses) print("匹配的状态:", matched1) # 输出: ['421-A', 'ARTICLE 11'] print("剩余文本:", remaining1) # 输出: None # 测试示例2:空字符串字段 snip2 = [('11202', '132', 'MULTIPLE DWELLING B', '', '300', '50')] matched2, remaining2 = extract_and_split_statuses(snip2, statuses) print("匹配的状态:", matched2) # 输出: [] print("剩余文本:", remaining2) # 输出: None # 测试示例3:部分匹配+剩余文本 snip3 = [('11203', '133', 'MULTIPLE DWELLING C', 'EVICT COOP/CONDO - PENDING', '350', '60')] matched3, remaining3 = extract_and_split_statuses(snip3, statuses) print("匹配的状态:", matched3) # 输出: ['EVICT COOP/CONDO'] print("剩余文本:", remaining3) # 输出: '- PENDING'
代码亮点
- 容错处理:即使snip格式不符合预期(比如为空、字段不足),也不会抛出错误
- 灵活分割:既可以提取所有匹配的状态,也能保留未匹配的剩余文本
- 适配带空格的状态:直接用
in操作符就能正确识别带空格的状态(比如ARTICLE 11)
内容的提问来源于stack exchange,提问作者Jope
相关产品推荐
相关产品推荐

