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

如何提取字符串中方括号内的字符,完成自定义替换并调整括号格式

方括号字符提取与同步替换实现方案

针对目标样例字符串"[A] [B] 这是我的[C]字符串",可以通过正则匹配的方式,一步实现方括号内部字符提取,以及替换过程中方括号的自动增删,全程不需要手动拆分字符串、拼接括号。

核心匹配规则

统一使用能把「方括号+内部内容」作为整体的正则表达式,同时通过捕获组单独拿到内部字符:

\[([^\[\]]+)\]

规则说明:

  • \[ / \] 分别匹配左右方括号本身,避免被当成正则特殊语法
  • 外层的小括号()是捕获组,专门用来提取两个方括号之间、不包含嵌套方括号的内部内容
  • 用这个规则匹配样例字符串,会直接命中3个匹配项,每个匹配项的捕获组内容就是纯内部字符A、B、C,不会夹带外层括号。

实现1:提取所有方括号内部字符

直接调用正则的全匹配查找方法,就能拿到所有不带括号的内部内容列表:

import re
sample_str = "[A] [B] 这是我的[C]字符串"
inner_text_list = re.findall(r"\[([^\[\]]+)\]", sample_str)
# 输出结果:['A', 'B', 'C']

实现2:替换时同步处理方括号增删

因为匹配阶段已经把「方括号整体」作为匹配单位,替换时只需要控制回调返回的内容是否套上[],就能自动完成方括号的添加/移除,不需要额外做字符串拆分:

场景1:保留方括号,仅替换内部内容

替换后保留原有方括号结构,只把括号里的旧内容换成自定义新内容:

# 自定义要替换的新内容,按原括号出现顺序排列
new_contents = ["用户ID", "用户名", "自定义"]
content_iterator = iter(new_contents)
# 替换时给新内容套上方括号,实现保留括号的效果
replaced_with_bracket = re.sub(
    r"\[([^\[\]]+)\]",
    lambda match: f"[{next(content_iterator)}]",
    sample_str
)
# 运行结果:"[用户ID] [用户名] 这是我的[自定义]字符串"

场景2:移除原有方括号,直接替换内容

替换时不返回带方括号的内容,自动去掉原有括号:

content_iterator = iter(new_contents)
replaced_without_bracket = re.sub(
    r"\[([^\[\]]+)\]",
    lambda match: f"{next(content_iterator)}",
    sample_str
)
# 运行结果:"用户ID 用户名 这是我的自定义字符串"

场景3:给普通文本新增方括号

如果需要替换无括号的普通文本、给新内容主动加上方括号,只需要在替换回调里手动给新内容套上[]即可,逻辑和上面的流程完全通用。

常见注意事项

如果遇到带嵌套方括号的场景(比如[[A]]这种结构),上面的正则可能无法正确匹配配对的括号,此时可以调整正则为支持嵌套匹配的规则,适配更复杂的文本结构。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 15:54:08