如何在R中匹配模式后提取一定长度的子字符串?

如何在R中匹配模式后提取一定长度的子字符串?,r,substring,R,Substring,我有一个字符串列表:string=c(“PT11201320360429”、“POSTEST1120122380820”、“POST_TEST1120122380820”)。我需要得到一个字符串向量,它只包含PT11、POSTEST11或POST_TEST11(即2013、2012或2012)之后的四个数字。我在R怎么做?谢谢 我们可以使用sub提取发生在PT11 | POSTEST11 | POST_TEST11之一之后的4位数字 sub("(PT11|POSTEST11|POST_TEST1

我有一个字符串列表:
string=c(“PT11201320360429”、“POSTEST1120122380820”、“POST_TEST1120122380820”)
。我需要得到一个字符串向量,它只包含PT11、POSTEST11或POST_TEST11(即2013、2012或2012)之后的四个数字。我在R怎么做?谢谢

我们可以使用
sub
提取发生在
PT11 | POSTEST11 | POST_TEST11
之一之后的4位数字

sub("(PT11|POSTEST11|POST_TEST11)(\\d{4}).*", "\\2", string)
#[1] "2013" "2012" "2012"

由于4个数字出现在11之后,我们可以将其作为一个组捕获,并在替换中使用捕获组的反向引用

sub("^P.*11(....).*", "\\1", string)
#[1] "2013" "2012" "2012"
或者用铅笔把它剪短

sub("^\\D+11(.{4}).*", "\\1", string)
#[1] "2013" "2012" "2012"
数据
字符串
string <- c("PT11201320360429", "POSTEST1120122380820", "POST_TEST1120122380820")