R 从字符串中提取数字
R Extract number from string
我一直在努力解决这个问题。我想要做的是从字符串中提取年份。例如,该字符串如下所示:
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
很明显我不想要字符串,只想要年份,我怎么得到这个?
我们可以使用
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)")
stringi::stri_match_last_regex(x, "\(([[:digit:]]+)\)")[,2]
转义括号仍然很痛苦,但它是一个可读性更高的正则表达式 IMO。
如果年份总是位于每个用括号圈起来的字符串的末尾,您可以在基数 R 中这样做:
as.numeric(gsub("\(|\)", "", substr(x, nchar(x)-5,nchar(x))))
#[1] 1995 1995
预先使用 trimws(x)
以防出现任何头部或尾部空格。
我一直在努力解决这个问题。我想要做的是从字符串中提取年份。例如,该字符串如下所示:
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
很明显我不想要字符串,只想要年份,我怎么得到这个?
我们可以使用
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)")
stringi::stri_match_last_regex(x, "\(([[:digit:]]+)\)")[,2]
转义括号仍然很痛苦,但它是一个可读性更高的正则表达式 IMO。
如果年份总是位于每个用括号圈起来的字符串的末尾,您可以在基数 R 中这样做:
as.numeric(gsub("\(|\)", "", substr(x, nchar(x)-5,nchar(x))))
#[1] 1995 1995
预先使用 trimws(x)
以防出现任何头部或尾部空格。