gpt4 book ai didi

r - 除括号内的内容外,按空格拆分字符串

转载 作者:行者123 更新时间:2023-12-04 09:40:12 24 4
gpt4 key购买 nike

我有以下字符串:

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 parenthesesUsing strsplit() in R, ignoring anything in parentheses

提前致谢!

最佳答案

我认为您需要一个匹配平衡括号然后跳过它们的正则表达式,然后将保留的空格与以下基于 PCRE 的正则表达式匹配:

(\((?:[^()]++|(?1))*\))(*SKIP)(*F)|\s

参见 regex demo (用上面的 \s 替换空格以获得更好的可见性)。

图案细节:

  • (\((?:[^()]++|(?1))*\))(*SKIP)(*F) - 第 1 组匹配
    • \((?:[^()]++|(?1))*\) - 表示平衡括号子字符串的子字符串:\( 匹配(, (?:[^()]++|(?1))* 匹配零个或多个 (*) 序列() 以外的 1+ 个字符(参见 [^()]++)或整个第 1 组的整个模式(参见子路由调用 (?1)),然后 \) 匹配文字 )(*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"

关于r - 除括号内的内容外,按空格拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39733645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com