使用 stringr 提取连字符后的前四位数字

Ash*_*wad 5 regex r

我试图提取以下字符串中连字符后的前四位数字:extract_public_2018_20190530180949469_58906_20110101-20111231Texas。我正在使用以下代码:

stringr::str_extract(
"extract_public_2018_20190530180949469_58906_20110101-20111231Texas", 
"-[[:digit:]]{4}"
)
Run Code Online (Sandbox Code Playgroud)

但我得到的-2011不是2011. 如何只提取四位数字而不提取连字符?

r2e*_*ans 5

使用正则表达式的lookbehind,这是一种在模式之前查找某些内容而不消耗它的非贪婪方式:

stringr::str_extract(
  "extract_public_2018_20190530180949469_58906_20110101-20111231Texas", 
  "(?<=-)[[:digit:]]{4}"
)
# [1] "2011"
Run Code Online (Sandbox Code Playgroud)