我正试图从下面提取22个:
"Feb22 19 (22) 100 (Weeklys) "
我尝试了以下方法,但是没有运气。有什么建议吗?
grep("\\(.*\\)", "Feb22 19 (22) 100 (Weeklys) ", value= TRUE
答案 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"