如何提取字符串中指定括号对及数量未知时最后一个括号内的内容
括号内字符串提取实现方案
待处理示例字符串:
"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即可复用思路。
括号总数未知时提取最后一对括号内的内容
两种可落地的实现思路:
- 全量匹配所有括号对内容,直接取匹配结果列表的最后一项,逻辑简单易维护
- 利用正则的贪婪匹配特性,直接定位到字符串最末尾的括号对,长文本场景下性能更优
两种思路的示例代码(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
相关产品推荐
相关产品推荐

