使用正则表达式提取R括号中的数字

时间:2019-02-26 01:42:23

标签: r regex

我正试图从下面提取22个:

"Feb22 19  (22) 100  (Weeklys) "

我尝试了以下方法,但是没有运气。有什么建议吗?

grep("\\(.*\\)", "Feb22 19  (22) 100  (Weeklys) ", value= TRUE

2 个答案:

答案 0 :(得分:3)

我们可以尝试将sub与捕获组一起使用:

x <- "Feb22 19  (22) 100  (Weeklys) "
sub(".*\\((\\d+)\\).*", "\\1", x)

[1] "22"

以上模式可以解释为:

.*     consume anything, up until the last
\(     literal open parenthesis, which is then followed by
(\d+)  one or more digits (which are captured)
\)     followed by a closing parenthesis
.*     followed by anything

替换为\\1,即模式中捕获的数字。请注意,如果输入 not 括号中包含数字,则对sub的上述调用实际上将返回原始输入字符串。如果您不喜欢这种行为,那么您将不得不做更多的工作。

答案 1 :(得分:2)

我们还可以使用:

    string<-"Feb22 19 (22) 100 (Weeklys) "
    unlist(stringr::str_extract_all(string,"\\d{1,}(?=\\))"))
    #[1] "22"

尽管我发现simplify的输出更好,但最近还是建议我使用unlist

使用stringr::str_extract_all(string,"\\d{1,}(?=\\))",simplify=TRUE)

    [,1]
[1,] "22"