【问题标题】:Extract string between third set of parentheses提取第三组括号之间的字符串
【发布时间】:2017-02-20 21:08:33
【问题描述】:

我希望提取第三组括号之间的string 部分,最好使用基数R。这是一个示例数据集:

my.data <- read.table(text = '
     my.num                              my.string                                  my.cov
        1    Abc(~1)Fgf(~-1+e2:cp)Bca(~-1+g1+g2:ti+g2:cfi+g2:pp+g2:cp)q(~-1+re:se)    10
        2    Abc(~1)Fgf(~-1+e1:e2:fi)Bca(~-1+g1+g2:ti+g2:pr+g2:ts+g2:cfi)q(~1)        20
        3    Abc(~1)Fgf(~1)Bca(~-1+g1+g2+g2:cp)q(~-1+re:se)                           15
', header = TRUE, stringsAsFactors = FALSE)
my.data

这两个结果中的任何一个都会有所帮助:

desired.result1 <- read.table(text = '
     my.num                     my.string            my.cov
        1    Bca(~-1+g1+g2:ti+g2:cfi+g2:pp+g2:cp)      10
        2    Bca(~-1+g1+g2:ti+g2:pr+g2:ts+g2:cfi)      20
        3    Bca(~-1+g1+g2+g2:cp)                      15
', header = TRUE, stringsAsFactors = FALSE)
desired.result1

desired.result2 <- read.table(text = '
     my.num                     my.string       my.cov
        1    ~-1+g1+g2:ti+g2:cfi+g2:pp+g2:cp      10
        2    ~-1+g1+g2:ti+g2:pr+g2:ts+g2:cfi      20
        3    ~-1+g1+g2+g2:cp                      15
', header = TRUE, stringsAsFactors = FALSE)
desired.result2

我对@9​​87654326@ 太生疏了,我什至不知道从哪里开始,也无法在互联网上找到类似的问题。感谢您的任何建议或帮助。

【问题讨论】:

  • 分割在"("上,拿到第三个,整理一下。
  • 可以有嵌套括号吗?
  • my.cov 列的间距如何?
  • @bobblebubble 列间距无关紧要。

标签: r regex string


【解决方案1】:

使用 strsplit:

sapply(strsplit(my.data$my.string, split = "(", fixed = TRUE), function(i){
  strsplit(i[4], split = ")", fixed = TRUE)[[1]][1]})

# [1] "~-1+g1+g2:ti+g2:cfi+g2:pp+g2:cp" "~-1+g1+g2:ti+g2:pr+g2:ts+g2:cfi" "~-1+g1+g2+g2:cp" 

【讨论】:

  • 或此paste0(sapply(strsplit(my.data$my.string, '\\)'), '[', 3), ')') 获得第一个
【解决方案2】:

第一个表达式:

sub(".*?\\(.*?\\).*?\\(.*?\\)(.*?\\(.*?\\)).*", "\\1", my.data$my.string)
[1] "Bca(~-1+g1+g2:ti+g2:cfi+g2:pp+g2:cp)" "Bca(~-1+g1+g2:ti+g2:pr+g2:ts+g2:cfi)"
[3] "Bca(~-1+g1+g2+g2:cp)" 

第二个表达式:

sub(".*?\\(.*?\\).*?\\(.*?\\).*?\\((.*?)\\).*", "\\1", my.data$my.string)
[1] "~-1+g1+g2:ti+g2:cfi+g2:pp+g2:cp" "~-1+g1+g2:ti+g2:pr+g2:ts+g2:cfi" "~-1+g1+g2+g2:cp"

【讨论】:

    猜你喜欢
    • 2020-02-10
    • 2020-01-26
    • 2017-11-10
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多