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

如何提取字符串中指定括号对及数量未知时最后一个括号内的内容

括号内字符串提取实现方案

待处理示例字符串:

"Hello my name is (john) (doe)."


提取第二对括号内的内容

核心逻辑:通过正则匹配所有非嵌套的括号对内容,按匹配顺序取第2项即可(索引从0开始,第二对对应索引值为1)。
示例代码(Python实现):

import re

raw_str = "Hello my name is (john) (doe)."
# 匹配所有()包裹、且内部不含括号的内容段
all_bracket_content = re.findall(r'\(([^()]+)\)', raw_str)

# 先做长度校验,避免字符串内括号数量不足2个时触发索引报错
if len(all_bracket_content) >= 2:
    second_val = all_bracket_content[1]
    print(second_val)  # 输出:doe
  • 该正则仅适用于无括号嵌套的场景,若存在(a(b)c)这类嵌套括号,需要调整匹配规则支持递归匹配。
  • 其他编程语言逻辑完全一致,替换为对应语言的正则匹配API即可复用思路。

括号总数未知时提取最后一对括号内的内容

两种可落地的实现思路:

  1. 全量匹配所有括号对内容,直接取匹配结果列表的最后一项,逻辑简单易维护
  2. 利用正则的贪婪匹配特性,直接定位到字符串最末尾的括号对,长文本场景下性能更优

两种思路的示例代码(Python实现):

import re

raw_str = "Hello my name is (john) (doe)."

# 思路1:全量匹配后取最后一项
all_bracket_content = re.findall(r'\(([^()]+)\)', raw_str)
if all_bracket_content:
    last_val_1 = all_bracket_content[-1]
    print(last_val_1)  # 输出:doe

# 思路2:贪婪匹配直接定位最后一对括号
match_res = re.search(r'.*\(([^()]+)\)', raw_str)
if match_res:
    last_val_2 = match_res.group(1)
    print(last_val_2)  # 输出:doe
  • 贪婪匹配的核心是.*会尽可能匹配最长的符合规则的内容,因此会自动跳过前面所有括号对,直接定位到最后一个(的位置。
  • 上述正则默认适配无嵌套括号的常规文本场景,有嵌套需求时可替换为支持递归匹配的正则规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:27:19