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

Python正则表达式:如何依次替换字符串中的多链接为短链接

解决方案:用re.sub结合回调函数实现高效替换

不需要手动记录索引重组字符串,使用Python的re.sub配合回调函数是更简洁高效的方案,能自动匹配原字符串中的链接并依次替换为对应的短链接,步骤如下:

实现步骤

  1. 提取所有链接并生成对应的短链接列表
  2. 使用迭代器遍历短链接列表,通过re.sub的回调函数完成逐个替换

完整代码示例

import re

def shorten_url(long_url):
    # 替换为实际调用短链接服务的逻辑
    # 示例:将原域名替换为rere.me(仅作演示)
    if long_url.startswith('https://'):
        domain = long_url.split('/')[2]
        return long_url.replace(domain, 'rere.me')
    elif long_url.startswith('www.'):
        parts = long_url.split('.')
        return f"www.rere.{parts[2]}{long_url[len('.'.join(parts[:3])):]}"
    return long_url

# 原字符串
original_string = 'Hello www.fb.com/home how are you https://twitter.it/home ?'

# 复用你已有的链接匹配正则
link_pattern = r'(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})'

# 提取所有链接
original_links = re.findall(link_pattern, original_string)

# 生成短链接列表
shortened_links = [shorten_url(link) for link in original_links]

# 创建短链接迭代器,保证替换顺序一致
short_link_iter = iter(shortened_links)

# 执行替换
result_string = re.sub(link_pattern, lambda match: next(short_link_iter), original_string)

print(result_string)
# 输出:Hello www.rere.me/home how are you https://rere.me/home ?

方案优势

  • 无需手动处理字符串索引和拼接,re.sub自动完成匹配位置的定位与替换,避免索引计算错误
  • 迭代器的使用确保短链接与原链接严格按顺序对应,不会出现替换错位
  • 代码逻辑清晰,可读性和可维护性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:25:10