如何在 R 中对字符串进行子集化

How to subset a string in R

亲爱的,我有一个字符串向量,例如:

LOCAT01PE
WECAT013EJD
AFECAT0155DR

我想对每个值进行子集化,只获取 CAT 和之后的所有数字:

CAT01
CAT013
CAT0155

我试过用命令substr,但是不行,因为CAT前的数量不固定,CAT后的数字也不固定

在 base R 中,我们可以使用 sub 来提取 "CAT" 后跟数字。

x <- c('LOCAT01PE', 'WECAT013EJD', 'AFECAT0155DR')
sub('..*(CAT\d+).*', '\1', x)
#[1] "CAT01"   "CAT013"  "CAT0155"

或类似str_extract

stringr::str_extract(x, "CAT\d+")

我们还可以使用 substrregexpr 来识别字符串中的相关 start/stop 点:

substr(vec,
       start = regexpr('CAT', vec),
       stop = regexpr('\d[a-zA-Z]', vec)
       )

输出:

[1] "CAT01"   "CAT013"  "CAT0155"

我们可以在base R中使用regexpr/regmatches。如果有任何 ? 和一个或多个数字 (\d+)

,它匹配单词 'CAT' 后跟 -
regmatches(x, regexpr("CAT-?\d+", x))
#[1] "CAT01"    "CAT013"   "CAT0155"  "CAT-01"   "CAT-013"  "CAT-0155"

数据

x <- c('LOCAT01PE', 'WECAT013EJD', 'AFECAT0155DR', 
    'LO-CAT-01PE', 'WE-CAT-013-EJD', 'AFE-CAT-0155-DR')