R 从由特殊字符包围的字符串中提取年份号

R 从由特殊字符包围的字符串中提取年份号,r,regex,R,Regex,从以下字符串中仅提取数字2007的好方法是什么: some_string <- "1_2_start_2007_3_end" some_string我们可以使用regex lookback来指定\u并提取后面的4位数字 library(stringr) str_extract(some_string, "(?<=_)\\d{4}") #[1] "2007" 您也可以使用sub选项: some_string <- "1_2_start_2007_3_end" sub(".*_

从以下字符串中仅提取数字2007的好方法是什么:

some_string <- "1_2_start_2007_3_end"

some_string我们可以使用regex lookback来指定
\u
并提取后面的4位数字

library(stringr)
str_extract(some_string, "(?<=_)\\d{4}")
#[1] "2007"

您也可以使用
sub
选项:

some_string <- "1_2_start_2007_3_end"
sub(".*_(\\d{4})_.*", "\\1", some_string)

只是为了得到一种非正则表达式的方法,在这种方法中,我们在
\uuu
上拆分并转换为数值。所有非数字都将强制为NA,因此我们使用
!是.na
,以消除它们。然后,我们使用
nchar
对字符进行计数,并拉取带有4的字符

i1 <- as.numeric(strsplit(some_string, '_')[[1]])
i1 <- i1[!is.na(i1)]

i1[nchar(i1) == 4]
#[1] 2007

i1这是我能想到的最快的正则表达式:

\S.*_(\d{4})_\S.*
这意味着

  • 任意数量的非空格字符
  • 那么
  • 后跟四位数字(d{4})
  • 以上四位数字是使用()
  • 另一个
  • 任何其他乱七八糟的非空格字符串
既然你提到你是新来的,请测试这个和所有其他答案,非常好地学习正则表达式,它深入解释了你的正则表达式实际上在做什么

如果您只关心(年),那么下面的正则表达式就足够了:

_(\d{4})_

非常感谢您的快速回复-这非常有效(将尽快接受您的回答)。还有一个问题。您是否有任何机会获得/学习此信息的来源或链接?我在网上找不到介绍。@PatrickBalada谢谢你的回复。我想这是一个很好的起点非常感谢你的解决方案。特别感谢您对正则表达式不同部分和链接的详细解释!
i1 <- as.numeric(strsplit(some_string, '_')[[1]])
i1 <- i1[!is.na(i1)]

i1[nchar(i1) == 4]
#[1] 2007
\S.*_(\d{4})_\S.*
_(\d{4})_