从以下字符串中仅提取数字2007的好方法是什么:
some_string <- "1_2_start_2007_3_end"
Run Code Online (Sandbox Code Playgroud)
在我的情况下检测年份数的模式是:
我是使用正则表达式的新手.我尝试了以下方法:
regexp <- "_+[0-9]+_"
names <- str_extract(files, regexp)
Run Code Online (Sandbox Code Playgroud)
但这并没有考虑到总有4位数字并输出下划线.
您也可以使用一个sub选项:
some_string <- "1_2_start_2007_3_end"
sub(".*_(\\d{4})_.*", "\\1", some_string)
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
细节
.* - 任何0+字符,尽可能多_- 一个_炭(\\d{4})- 第1组(通过\1替换模式引用):4位数_.*- a _然后任何0+字符到字符串的结尾.注意:akrun str_extract(some_string, "(?<=_)\\d{4}")将提取最左边的出现,我sub(".*_(\\d{4})_.*", "\\1", some_string)将提取最右边出现的4位数子串_.对于我的返回最左边的解决方案,使用第一个的懒惰量词.:sub(".*?_(\\d{4})_.*", "\\1", some_string).
R测试:
some_string <- "1_2018_start_2007_3_end"
sub(".*?_(\\d{4})_.*", "\\1", some_string) # leftmost
## -> 2018
sub(".*_(\\d{4})_.*", "\\1", some_string) # rightmost
## -> 2007
Run Code Online (Sandbox Code Playgroud)