Python如何匹配列表内目标字符串并将其移动到对应字符串末尾
问题根源
之前的replace实现存在两个硬伤:
- 直接替换国家字符串本身时,不会同步处理字符串前后的空格,替换后必然出现单词粘连、残留多余空格的问题
- 仅支持单个固定字符串匹配,无法适配国家列表的批量匹配场景
实现代码
核心逻辑是先把地址按空格拆分为独立单词,匹配到对应国家后单独提取,剩余单词重新规整拼接,最后把国家追加到末尾,全程自动处理空格问题。
lookup = ['US','CA','INDIA','CHINA'] address_list = ['3200 NORTHLINE AVE STE 360 GREENSBORO 27408-7611 US NC','200 LINE AVE STE 360 GBORO 77611 CA NC','60 Indiranagar INDIA Bangalore'] result = [] for addr in address_list: words = addr.split() matched_country = "" remain_words = [] for word in words: # 统一转大写匹配,兼容大小写混写的国家名 if word.upper() in [c.upper() for c in lookup]: matched_country = word else: remain_words.append(word) # 拼接时自动用单个空格分隔,不会出现多余空格或粘连 final_addr = " ".join(remain_words) if matched_country: final_addr += f" {matched_country}" result.append(final_addr) # 输出验证 for item in result: print(item)
运行结果
3200 NORTHLINE AVE STE 360 GREENSBORO 27408-7611 NC US 200 LINE AVE STE 360 GBORO 77611 NC CA 60 Indiranagar Bangalore INDIA
补充说明
- Python原生的
split()方法不带参数时,会自动识别任意数量的连续空白符做拆分,后续用" ".join()拼接时只会在单词间加单个空格,从根源解决空格异常问题 - 大小写统一匹配的逻辑,可以覆盖
India/INDIA/india这类不同写法的国家名,不会漏匹配 - 若某条地址里没有匹配到列表中的国家,会直接返回规整空格后的原地址,不会抛出异常
内容的提问来源于stack exchange,提问作者kiran u
相关产品推荐
相关产品推荐

