R从字符串中提取数字

时间:2016-10-23 12:22:35

标签: r string numeric gsub

我一直在努力做到这一点。我想要做的是从字符串中提取一年。字符串如下所示:

Toy Story (1995)

或者看起来像这样

Twelve Monkeys (a.k.a. 12 Monkeys) (1995)

要提取数字,我目前使用

year = gsub("(?<=\\()[^()]*(?=\\))(*SKIP)(*F)|.", "", x, perl=T)

现在,这可以在大多数情况下使用,第一个使用,但在列表中也使用第二个。

[1] 1995
[2] a.k.a. 12 Monkeys1995

所以显然我不想要字符串而只需要一年,我该怎么做?

3 个答案:

答案 0 :(得分:3)

我们可以使用

library(stringr)
as.numeric(str_extract(x, "(?<=\\()[0-9]+(?=\\))"))
#[1] 1995 1995

数据

x <-  c("Toy Story (1995)", "Twelve Monkeys (a.k.a. 12 Monkeys) (1995)")

答案 1 :(得分:2)

stringi::stri_match_last_regex(x, "\\(([[:digit:]]+)\\)")[,2]

逃避parens仍然是一种痛苦,但它是一个更易读的正则表达式IMO。

答案 2 :(得分:0)

如果年份总是位于括号圈出的每个字符串的末尾,则可以在基数R中执行此操作:

as.numeric(gsub("\\(|\\)", "", substr(x, nchar(x)-5,nchar(x))))
#[1] 1995 1995

事先使用trimws(x),以防有任何头部或尾部空间。