如何提取R中字符串的最后4位数字

如何提取R中字符串的最后4位数字,r,regex,stringr,R,Regex,Stringr,我想提取给定字符串中的最后4位数字,但无法计算出来。最后4位数字可以是“XXXX”或“XXXX-”。最后,我有一个异质条目列表,包括单个年份(即2001年或2001年)、年份列表(即2001年、2004年-)和年份范围(即2001年至2010年),或条目末尾带或不带破折号(“-”)的组合 我意识到“$”是标识结束的标记,而“^”用于标识正则表达式中的开始。我能够很容易地提取前4个。下面是一个示例,说明我能做什么,以及最后4位的代码不起作用: library(stringr) test <-

我想提取给定字符串中的最后4位数字,但无法计算出来。最后4位数字可以是“XXXX”或“XXXX-”。最后,我有一个异质条目列表,包括单个年份(即2001年或2001年)、年份列表(即2001年、2004年-)和年份范围(即2001年至2010年),或条目末尾带或不带破折号(“-”)的组合

我意识到“$”是标识结束的标记,而“^”用于标识正则表达式中的开始。我能够很容易地提取前4个。下面是一个示例,说明我能做什么,以及最后4位的代码不起作用:

library(stringr)
test <- c("2009-", "2008-2015", "2001-, 2003-2010, 2012-")
str_extract_all(test, "^[[:digit:]]{4}") # Extracts FIRST 4
[[1]]

字符(0)

[[2]]

“2015年”

[[3]]

字符(0)

[[1]]

字符(0)

[[2]]

“2015年”

[[3]]

字符(0)

我希望的结果是:

[1] “2009”“2015”“2012”


我们可以尝试使用
sub

sub(".*(\\d+{4}).*$", "\\1", test)
#[1] "2009" "2015" "2012"

我们可以尝试使用
sub

sub(".*(\\d+{4}).*$", "\\1", test)
#[1] "2009" "2015" "2012"
sub(".*(\\d+{4}).*$", "\\1", test)
#[1] "2009" "2015" "2012"