我有以下字符串:x <- "(((K05708+K05709+K05710+K00529) K05711),K05712) K05713 K05714 K02554"# [1] "(((K05708+K05709+K05710+K00529) K05711),K05712) K05713 K05714 K02554"并且我想通过空格分隔符来分割它,以避免括号内的内容,以便具有以下内容:[[1]][1] "(((K05708+K05709+K05710 K00529) K05711),K05712)"[2] "K05713" "K05714"[4] "K02554"请注意,第一个括号级别内保留两个空格。我阅读了以下答案,但无法在我的情况下起作用:r split on delimiter not in parentheses和Using strsplit() in R, ignoring anything in parentheses提前致谢! 最佳答案 我认为您需要一个匹配平衡括号的正则表达式,然后跳过它们,然后匹配以下基于PCRE的正则表达式保留的空白:(\((?:[^()]++|(?1))*\))(*SKIP)(*F)|\s请参见regex demo(将上面的空间用\s代替,以获得更好的可见性)。图案细节:(\((?:[^()]++|(?1))*\))(*SKIP)(*F)-组1匹配\((?:[^()]++|(?1))*\)-带有平衡括号子字符串的子字符串:\(匹配(,(?:[^()]++|(?1))*匹配零个或多个(*)1个以上字符的序列,而不是(和)(请参见)或整个第1组的整个模式(请参见子路由调用[^()]++),然后(?1)匹配文字\),并且)使regex丢弃整个匹配的文本,同时将regex索引保持在比赛结束后,继续寻找下一场比赛(*SKIP)(*F)-或|-要分割的空间这是一个online R demo:s <- "(((K05708+K05709+K05710+K00529) K05711),K05712) K05713 K05714 K02554"strsplit(s, "(\\((?:[^()]++|(?1))*\\))(*SKIP)(*F)| ", perl=TRUE)输出:[[1]][1] "(((K05708+K05709+K05710+K00529) K05711),K05712)"[2] "K05713"[3] "K05714"[4] "K02554" 10-04 18:45