亲爱的,我有一个字符串向量,比如:
LOCAT01PE
WECAT013EJD
AFECAT0155DR
我想子集每个值只获得CAT和之后的所有数字:
CAT01
CAT013
CAT0155
我试过使用命令substr
,但它不起作用,因为单词CAT之前的数量不固定,CAT之后的数字也不固定。
在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+")
我们可以在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')
我们还可以将substr
与regexpr
一起使用来识别字符串中的相关开始/停止点:
substr(vec,
start = regexpr('CAT', vec),
stop = regexpr('\d[a-zA-Z]', vec)
)
输出:
[1] "CAT01" "CAT013" "CAT0155"