【发布时间】:2020-01-02 23:48:24
【问题描述】:
我有一个字符串列表:string = c("PT11201320360429", "POSTEST1120122380820", "POST_TEST1120122380820")。我需要得到一个字符串向量,它只包含 PT11、POSTEST11 或 POST_TEST11 之后的四个数字(即 2013、2012 或 2012)。我怎样才能在 R 中做到这一点?谢谢!
【问题讨论】:
我有一个字符串列表: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")
【讨论】: