【问题标题】:Return only matching portion of regular expression只返回正则表达式的匹配部分
【发布时间】:2015-08-24 13:47:33
【问题描述】:

我有:

> pattern
[1] "(/[[:digit:]]{4}/)"

所以我只想提取匹配部分...数字加上 /.../。这是我尝试过的:

> gsub(pattern, '\\1', grep(pattern, c("t3tg3wgw/5764/", "ggg", "grsgs/gwgew/5656/bfsbs"), value=TRUE))
[1] "t3tg3wgw/5764/"         "grsgs/gwgew/5656/bfsbs"

但是,这仍然会返回附加到实际匹配项的字母,这些字母本身与正则表达式不匹配。如何只提取/5764//5656/

【问题讨论】:

  • @akrun 感谢您提供的信息。我正在寻找一种使用基础 R 的方法。
  • 这种情况下可以使用gregxpr/regmatches

标签: regex r


【解决方案1】:

我们可以使用library(stringr)中的str_extract_all提取模式/后跟一个或多个数字([0-9]+)后跟/以输出list,它可以是unlisted转换为vector

library(stringr)
unlist(str_extract_all(v1, '/[0-9]+/'))
#[1] "/5764/" "/5656/"

或者我们使用相同的模式并使用来自base Rregmatches/gregexpr

unlist(regmatches(v1, gregexpr('/[0-9]+/',v1)))
#[1] "/5764/" "/5656/"

数据

v1 <- c("t3tg3wgw/5764/", "ggg", "grsgs/gwgew/5656/bfsbs")

【讨论】:

  • 是的,刚刚意识到并修改了我的答案。你是对的。
【解决方案2】:

尝试将模式更改为.*(/[[:digit:]]{4}/).*

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    相关资源
    最近更新 更多