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

Python如何实现字符串匹配字典替换后无多余空格正确拼接

解决方案

问题原因

  • 原代码用[A-Za-z0-9]+|\S拆分字符串,会把所有非字母数字的单个字符(包括连字符、@、$等)都拆成独立元素,拼接时用空格连接就会产生多余空格
  • 原代码只对整个拆分后的token做字典匹配,只有当token完全等于字典键的时候才会替换,而23beach整个token不等于beach,所以无法触发替换

最优实现方案

直接用re.sub的回调函数做匹配替换,不需要拆分拼接字符串,完全保留原有非关键词的内容结构:

import re

def standarisationn(addr):
    # 原有逻辑:逗号替换为空格
    addr = re.sub(',', ' ', addr)
    lookp_dict = {"allee":"ale","alley":"ale","ally":"ale","aly":"ale",
                  "arcade":"arc",
                  "apartment":"apt","aprtmnt":"apt","aptmnt":"apt",
                  "av":"ave","aven":"ave","avenu":"ave","avenue":"ave","avn":"ave","avnue":"ave",
                  "beach":"bch",
                  "bend":"bnd",
                  "blfs":"blf","bluf":"blf","bluff":"blf","bluffs":"blf",
                  "boul":"blvd","boulevard":"blvd","boulv":"blvd",
                  "bottm":"bot","bottom":"bot",
                  "branch":"br","brnch":"br",
                  "brdge":"brg","bridge":"brg",
                  "bypa":"byp","bypas":"byp","bypass":"byp","byps":"byp",
                  "camp":"cmp",
                  "canyn":"cny","canyon":"cny","cnyn":"cny",
                  "southwest":"sw" ,"northwest":"nw"}
    # 按键长度倒序排序,避免短键优先匹配覆盖长键
    sorted_keys = sorted(lookp_dict.keys(), key=lambda x: -len(x))
    # 构造正则:匹配前后都不是字母的关键词,支持数字、符号前缀后缀的场景
    pattern = re.compile(r'(?<![a-zA-Z])({})(?![a-zA-Z])'.format('|'.join(map(re.escape, sorted_keys))))
    # 替换匹配到的关键词
    res = pattern.sub(lambda x: lookp_dict[x.group()], addr)
    # 合并多个连续空格为单个,符合输出格式要求
    res = re.sub(r'\s+', ' ', res).strip()
    return res

# 测试
print(standarisationn("well-2-34 2   @$%23beach bend com"))
# 输出:well-2-34 2 @$%23bch bnd com

方案说明

  1. 没有拆分原字符串的非空格字符,直接在原字符串基础上做替换,连字符、特殊符号的位置和原有拼接关系完全保留,不会产生多余空格
  2. 正则用前后向断言限制匹配的关键词前后无其他字母,只要是独立的字母序列就可以匹配,因此23beach中的beach可以被正确识别替换
  3. 对字典键按长度倒序排序,避免出现短键先匹配导致长键无法匹配的问题,比如存在av和avenue时,会优先匹配更长的avenue

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:06:02