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

如何使用str_extract提取含嵌套括号字符串中的完整括号内容

问题产生原因

你使用的正则\\([^()]+\\)$中,[^()]+的规则是匹配连续的、不包含(和)的字符。当目标括号内存在嵌套括号时,内层的(会被该规则拦截,无法完成从最外层左括号到最外层右括号的完整匹配,因此返回NA。

解决方法

使用支持递归匹配的正则表达式即可兼容嵌套括号场景,支持提取任意层级嵌套的末尾括号内容:

stringr包实现代码

library(stringr)
# 嵌套括号测试用例
x <- "Wine name (Country A (State))"
# 递归匹配末尾完整括号内容
result <- str_extract(x, '\\((?:[^()]++|(?R))*\\)$')

运行后result的值为"(Country A (State))",符合提取要求。

Base R实现代码

如果不依赖stringr包,可使用base R的正则功能开启perl兼容模式实现:

x <- "Wine name (Country A (State))"
result <- regmatches(x, gregexpr('\\((?:[^()]++|(?R))*\\)$', x, perl = TRUE))[[1]]

正则逻辑说明

  • (?R)代表递归调用整个正则表达式本身
  • (?:[^()]++|(?R))*表示匹配逻辑可以是:要么匹配一段不含括号的普通字符,要么递归匹配一对完整的嵌套括号,该逻辑重复0次或多次即可覆盖所有层级的嵌套括号结构
  • 末尾的$保证仅匹配字符串最末尾的括号内容

内容的提问来源于stack exchange,提问作者The 'Fe' Man

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:39:04