Python正则表达式:如何依次替换字符串中的多链接为短链接
解决方案:用
re.sub结合回调函数实现高效替换 不需要手动记录索引重组字符串,使用Python的re.sub配合回调函数是更简洁高效的方案,能自动匹配原字符串中的链接并依次替换为对应的短链接,步骤如下:
实现步骤
- 提取所有链接并生成对应的短链接列表
- 使用迭代器遍历短链接列表,通过
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
相关产品推荐
相关产品推荐

