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

R语言中拆分含括号的不规则字符串至多列的技术求助

解决字符串拆分问题:保留括号内容并按特定逗号分隔

问题分析

你需要拆分的字符串结构是**[前缀] ([括号内容]) [后缀]**,多个这样的单元用逗号分隔,但后缀中可能包含逗号(如作品名Synecdoche, New York),因此不能直接按所有逗号拆分。核心需求是:

  • 保留括号内外的所有内容
  • 仅将下一个(前最近的逗号作为单元分隔符,后缀内的逗号不拆分

解决方案(基于stringi包)

1. 先拆分独立单元

用正则匹配仅分隔单元的逗号:逗号后跟着的内容包含(,这样就能跳过后缀里的逗号。正则表达式为, (?=[^,]+ \\(),其中:

  • , :匹配逗号加空格
  • (?=[^,]+ \\():正向预查,确保逗号后的内容包含((即下一个单元的前缀)

2. 提取每个单元的三部分

对每个拆分出的单元,用正则提取前缀、括号内内容、后缀,正则表达式为^\\s*(.*?)\\s*\\((.*?)\\)\\s*(.*)$,其中:

  • ^\\s*:匹配开头的空白字符
  • (.*?):非贪婪匹配前缀内容(直到第一个(前的空白)
  • \\((.*?)\\):匹配括号及其中内容,捕获括号内的部分
  • \\s*(.*)$:匹配括号后的空白及后缀内容(直到结尾)

代码实现

处理测试字符串

library(stringi)

# 测试字符串
str <- "A (B) C, D (E) F, G, H, a (b) c"

# 1. 拆分独立单元
entries <- stri_split_regex(str, ", (?=[^,]+ \\()")[[1]]

# 2. 提取每个单元的三部分
split_parts <- lapply(entries, function(entry) {
  match_result <- stri_match_all_regex(entry, "^\\s*(.*?)\\s*\\((.*?)\\)\\s*(.*)$")[[1]]
  # 去除多余空白并返回三部分
  c(stri_trim(match_result[2]), stri_trim(match_result[3]), stri_trim(match_result[4]))
})

# 合并为最终列表
final_parts <- unlist(split_parts)
print(final_parts)
# 输出:[1] "A"         "B"         "C"         "D"         "E"         "F, G, H"   "a"         "b"         "c"

处理实际字符串

# 实际字符串
str2 <- "Independent Spirit Award  (Co-Nominee)  for Anomalisa, Academy Award  (Co-Nominee)  for Anomalisa, Independent Spirit Award  (Co-Winner)  for Synecdoche, New York, Independent Spirit Award  (Nominee)  for Synecdoche, New York"

# 1. 拆分独立单元
entries2 <- stri_split_regex(str2, ", (?=[^,]+ \\()")[[1]]

# 2. 提取每个单元的三部分
split_parts2 <- lapply(entries2, function(entry) {
  match_result <- stri_match_all_regex(entry, "^\\s*(.*?)\\s*\\((.*?)\\)\\s*(.*)$")[[1]]
  c(stri_trim(match_result[2]), stri_trim(match_result[3]), stri_trim(match_result[4]))
})

# 按要求用分号连接(含末尾分号)
final_result <- paste0(paste(unlist(split_parts2), collapse = "; "), ";")
cat(final_result)
# 输出:Independent Spirit Award; Co-Nominee; for Anomalisa; Academy Award; Co-Nominee; for Anomalisa; Independent Spirit Award; Co-Winner; for Synecdoche, New York; Independent Spirit Award; Nominee; for Synecdoche, New York;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:55:23