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

Python正则匹配子串替换的更优雅实现方案咨询

优化Python中替换【】内空格的优雅写法

需求说明

匹配句子中被【】包裹的内容,仅将包裹内容内部的空格替换为“-”:

  • 输入示例:(c)variable < var_CONST1(例 -125(N)) 【AAA BBB有】AND【技術企画】AND【AAA BBB CCC】
  • 预期输出:(c)variable < var_CONST1(例 -125(N)) 【AAA-BBB有】AND【技術企画】AND【AAA-BBB-CCC】

原实现代码

import re

text = "(c)variable < var_CONST1(例 -125(N)) 【AAA BBB有】AND【技術企画】AND 【AAA BBB CCC】"

match_list = re.findall(r"【[\w\s]+】", text)
match_list = [w.replace(" ", "-") for w in match_list]
tmp_txt = re.sub(r"【[\w\s]+】",  " tkn ", text).split()

new_txt = ""
for txt in tmp_txt:
    if txt == "tkn":
      new_txt = new_txt + " " + match_list[0]
      match_list.pop(0)
    else:
      new_txt = new_txt + " " + txt

print(new_txt)

更优雅的实现方式

利用re.sub的回调函数特性,直接对每个匹配到的内容做处理,无需拆分文本和维护匹配列表:

import re

text = "(c)variable < var_CONST1(例 -125(N)) 【AAA BBB有】AND【技術企画】AND 【AAA BBB CCC】"

def replace_inner_space(match):
    # 获取完整的匹配内容(包含【】)
    matched_content = match.group(0)
    # 替换内容内部的空格为“-”
    return matched_content.replace(" ", "-")

# 用【[^】]+】匹配所有【】包裹的内容(兼容任意非】的字符)
result = re.sub(r"【[^】]+】", replace_inner_space, text)
print(result)

优化点说明

  1. 简化流程:通过回调函数直接处理每个匹配项,省去了拆分文本、维护替换列表的步骤,逻辑更紧凑
  2. 正则兼容性提升:原正则【[\w\s]+】仅能匹配字母、数字、下划线和空格,新正则【[^】]+】可以匹配【】内的任意字符(除了】本身),适用场景更广
  3. 减少中间变量:无需临时存储匹配结果和拆分后的文本,内存占用更低

内容的提问来源于stack exchange,提问作者shane.singwa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 04:33:37