R Regexp - 提取数字为5位数

Ren*_*rop 7 regex r

我有一个a像这样的字符串:

stundenwerte_FF_00691_19260101_20131231_hist.zip

并希望从中提取5位数字"00691".

我尝试使用gregexprregmatches以及stringr::str_extract 但无法确定正确的rexexp.我来到:

gregexpr( "[:数字{5}:]",一个)

哪个应该返回5位数字,我不明白如何解决它.
这不适当地工作:(

m <- gregexpr("[:digits{5}:]",a)
regmatches(a,m)
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助!

hwn*_*wnd 10

你可以简单地sub用来抓取数字,regmatches这个简单的情况下不需要IMO .

x <- 'stundenwerte_FF_00691_19260101_20131231_hist.zip'
sub('\\D*(\\d{5}).*', '\\1', x)
# [1] "00691"
Run Code Online (Sandbox Code Playgroud)

编辑:如果您有其他字符串包含前面的数字,您将略微修改表达式.

sub('.*_(\\d{5})_.*', '\\1', x)
Run Code Online (Sandbox Code Playgroud)


G. *_*eck 6

1)子

sub(".*_(\\d{5})_.*", "\\1", x)
## [1] "00691"
Run Code Online (Sandbox Code Playgroud)

2)gsubfn :: strapplyc 如果我们使用strapplyc以下内容,可以略微简化正则表达式:

library(gsubfn)

strapplyc(x, "_(\\d{5})_", simplify = TRUE)
## [1] "00691"
Run Code Online (Sandbox Code Playgroud)

3)strsplit 如果我们知道它是第三个字段:

read.table(text = x, sep = "_", colClasses = "character")$V3
## [1] "00691"
Run Code Online (Sandbox Code Playgroud)

3a)

strsplit(x, "_")[[1]][3]
## [1] "00691"
Run Code Online (Sandbox Code Playgroud)