如何在长字符串列表中查找子串'ABC'并提取其后4位对应ID字符
你当前代码的错误在于切片的结束下标写为了固定值1+7,而非基于ABC出现的位置动态计算,会导致提取结果不符合预期。
解决方案1:修正字符串切片逻辑
字符串索引从0开始计数,子串ABC占3个字符长度,若ABC的起始下标为i,则其后第一个字符的下标为i+3,取后续4个字符的结束下标为i+3+4 = i+7,修正后的循环代码如下:
cust_id = [] for index, row in df.iterrows(): desc = row['ERROR_DESC'] # 先校验是否存在目标子串,避免匹配失败抛出异常 if 'ABC' not in desc: cust_id.append(None) continue i = desc.index('ABC') id_num = desc[i+3:i+7] cust_id.append(id_num)
解决方案2:更适配复杂业务场景的正则提取(推荐)
你提到实际业务中前缀不固定、还需要提取其他子串,用Pandas内置的正则提取方法性能更高、代码更简洁,无需手动循环遍历:
# 匹配ABC后的4个任意字符,直接生成CUSTOMER_ID列 df['CUSTOMER_ID'] = df['ERROR_DESC'].str.extract(r'ABC(.{4})') # 若需要去除ID前后的空格,只保留纯数字,可补充以下行 df['CUSTOMER_ID'] = df['CUSTOMER_ID'].str.strip()
如果需要同时提取多个前缀的ID,只需要调整正则规则即可,比如匹配ABC或者DEF前缀可以写为r'(?:ABC|DEF)(.{4})'。
内容的提问来源于stack exchange,提问作者Austin Rock
相关产品推荐
相关产品推荐

