【问题标题】:Ho to extract words between two hyphens?如何提取两个连字符之间的单词?
【发布时间】:2020-12-30 19:51:30
【问题描述】:

如何提取R中两个连字符之间的所有内容

   ts = ("az_bna_njh","j_hj_lkiuy","ml_", "_kk")

我需要提取 bna、hj、ml 和 kk

【问题讨论】:

    标签: r trim


    【解决方案1】:

    我们可以使用

     sub("^\\w+_(\\w+)_.*", "\\1", trimws(ts, whitespace = "_"))
     #[1] "bna" "hj"  "ml"  "kk"
    

    或者另一种选择是

     sub("^\\w+_(\\w+)_.*", "\\1", gsub("^_|_$", "", ts))
    

    【讨论】:

    • @bicton 你能检查你的 R 版本吗?我正在使用R 4.0.2
    • 这就是原因,因为最近的版本中引入或更新了 trimws
    • @bicton 你说trimws 不起作用。不确定它如何与公认的解决方案一起使用
    【解决方案2】:

    你也可以试试:

    #Data
    ts = c("az_bna_njh","j_hj_lkiuy","ml_", "_kk")
    #Code
    gsub(".*_(.*)\\_.*", "\\1", trimws(ts,whitespace = '_'))
    

    输出:

    [1] "bna" "hj"  "ml"  "kk"
    

    【讨论】:

    • 我试过 sub("^\\w+_(\\w+)_.*", "\\1", gsub("^_|_$", "", ts) ), 有效。但我有一个问题。实际上,我需要 n_ 和 _a 之间的单词。你有什么想法吗?
    • @bicton 让我检查一下!
    • @bicton 试试这个代码:ts = c("an_bn_ajh") 然后gsub(".*n_(.*)\\_a.*", "\\1", ts) 让我知道这是否适合你!
    【解决方案3】:

    你可以尝试另一种方式

    library(stringr)
    str_replace_all(ts, c("^.*_(\\w+)_.*$" = "\\1", "^_|_$" = ""))
    #[1] "bna" "hj"  "ml"  "kk" 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-30
      • 2012-04-13
      • 2020-06-16
      • 1970-01-01
      • 2014-05-28
      • 2013-12-12
      • 1970-01-01
      • 2019-08-18
      相关资源
      最近更新 更多