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

如何按多分隔符拆分括号外的字符串且保留原分隔符

解决方案

你可以用支持递归匹配的Perl正则实现需求,无需手动拼接分隔符,自动识别并保留括号外的逗号、空格两种分隔符,同时跳过括号内的所有分隔符。

代码实现

首先准备示例输入:

x <- "(((K05708+K05709+K05710+K00529) K05711),K05712),K05713 K05714 K02554"

方法1:使用stringr包实现(写法更简洁)

library(stringr)

# 核心匹配逻辑
split_res <- str_extract_all(x, perl("(?>[^(), ]+|\\((?R)*\\))+|[ ,](?>[^(), ]+|\\((?R)*\\))*"))

方法2:使用base R实现(无需额外安装包)

pattern <- "(?>[^(), ]+|\\((?R)*\\))+|[ ,](?>[^(), ]+|\\((?R)*\\))*"
split_res <- regmatches(x, gregexpr(pattern, x, perl = TRUE))

输出验证

运行后得到的结果和你给出的预期输出完全一致:

split_res
#> [[1]]
#> [1] "(((K05708+K05709+K05710+K00529) K05711),K05712)"
#> [2] ",K05713"                                       
#> [3] " K05714"                                       
#> [4] " K02554"

逻辑说明

正则通过(?R)递归匹配嵌套的括号结构,保证括号内的逗号、空格不会被识别为拆分点,两个匹配分支分别处理:

  • 第一个片段:从字符串开头到第一个括号外分隔符的完整内容,包含所有配对括号
  • 后续片段:以分隔符(逗号/空格)开头,匹配到下一个括号外分隔符前的全部内容,自动保留原分隔符类型
    该方法适配任意层数的嵌套括号,也支持扩展更多分隔符类型,只需要在正则的[ ,]位置增加你需要的分隔符即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:09:02