如何在R中提取字符之间的数字

时间:2015-09-27 21:49:59

标签: regex r

我有不同的字符向量包含"p.L86*""p.A59fs*4""p.E309*"等字符串。每个字符都有不同的数字。我只想提取字符之间的第一个数字,所以预期的解决方案是86, 59, 309

我尝试gsub("[^0-9]+","","p.A59fs*4"),但会保存所有数字......

2 个答案:

答案 0 :(得分:5)

您可以使用sub获取第一个匹配结果:

x <- c('p.L86*', 'p.A59fs*4', 'p.E309*')
sub('\\D*(\\d+).*', '\\1', x)
# [1] "86"  "59"  "309"

或回退到 stringi 包并改为匹配:

stri_extract_first_regex(x, '\\d+')

答案 1 :(得分:2)

尝试

library(stringr)
str_extract(v1, '(?<=[^0-9])\\d+(?=[^0-9])')
#[1] "86"  "59"  "309"

或使用sub

sub('^[^0-9]+([0-9]+).*', '\\1', v1)

数据

v1 <- c("p.L86*", "p.A59fs*4", "p.E309*")