R:如何提取向量中某两个字符之间的字符

dat1 <- c('human(display_long)|uniprotkb:ESR1(gene name)')
dat2 <- c('human(display_long)|uniprotkb:TP53(gene name)')
dat3 <- c('human(display_long)|uniprotkb:GPX4(gene name)')
dat4 <- c('human(display_long)|uniprotkb:ALOX15(gene name)')
dat5 <- c('human(display_long)|uniprotkb:PGR(gene name)')

如何提取'uniprotkb:'和'(gene name)'之间的字符。

方法很多,我这是其中一种思路


dat <- rbind(dat1,dat2,dat3,dat4,dat5)
a <- substring(dat,31,) #截去前面
a <- substr(a,1,nchar(a)-11)  #截去后面