You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Python中如何替换字符串里的子字符串?

地址缩写规范化解决方案

先把你的需求用表格整理得更清晰:

示例数据与预期结果

S.no原始地址预期结果
12341 blvd2341 Boulevard
2648 s Kingston rd648 S Kingston Road
3sw Beverly stSW Beverly Street

要搞定这个问题,关键是精准匹配独立的缩写单词,避免误替换(比如不会把包含"rd"的普通单词拆改)。这里给你一套可复用的实现方案:

核心思路

用正则表达式的单词边界\b)锁定独立的缩写,再通过映射字典批量替换成完整形式,同时处理大小写规范化。

具体实现(Python)

1. 定义缩写映射表

把需要替换的缩写和目标值整理成字典,正则模式确保只匹配单独的单词:

abbreviation_map = {
    r'\bblvd\b': 'Boulevard',  # 匹配独立的blvd
    r'\brd\b': 'Road',         # 匹配独立的rd
    r'\bst\b': 'Street',       # 匹配独立的st
    r'\bs\b': 'S',             # 匹配独立的s(南方向)
    r'\bsw\b': 'SW'            # 匹配独立的sw(西南方向)
}

2. 编写替换函数

re.sub遍历映射表完成替换,同时忽略大小写适配不同输入:

import re

def normalize_address(address):
    for pattern, replacement in abbreviation_map.items():
        # IGNORECASE确保不管缩写是大写还是小写都能匹配
        address = re.sub(pattern, replacement, address, flags=re.IGNORECASE)
    return address

3. 测试验证

把你的测试数据放进去跑:

test_cases = [
    "2341 blvd",
    "648 s Kingston rd",
    "sw Beverly st"
]

for original in test_cases:
    normalized = normalize_address(original)
    print(f"原始: {original:20} → 结果: {normalized}")

输出结果完全符合预期:

原始: 2341 blvd             → 结果: 2341 Boulevard
原始: 648 s Kingston rd     → 结果: 648 S Kingston Road
原始: sw Beverly st         → 结果: SW Beverly Street

扩展说明

  • 如果需要添加更多地址缩写(比如nNortheEast),直接往abbreviation_map里加键值对就行,非常灵活。
  • 单词边界\b是关键,它能确保我们只替换单独的缩写,不会影响像"broad"里的"rd"或者"blvd"出现在其他单词中的情况。

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

火山引擎 最新活动