我有一个这样的字符串:
Sample.ID<-"(<SampleID>, 2213 )"
我正在使用以下gsub代码从此字符串中提取数字:
ID<-as.numeric(gsub("\\D", "", Sample.ID))
这没关系,但有时在我的数据中字符串是这样的:
Sample.ID<-"(<SampleID>, 2213-EQUINOX BELL 2-P, )"
然后我有一个问题,因为它需要所有数字(即22132)我只想拥有2213。 什么是解决方法?
谢谢, PHUONG
答案 0 :(得分:3)
您可以捕获数字,然后使用反向引用
sub(".*?(\\d+).*", "\\1", Sample.ID)
[1] "2213" "2213"
答案 1 :(得分:2)
正如您的数据一样
Sample.ID<-"(<SampleID>, 2213-EQUINOX BELL 2-P, )"
使用(?<=, )\d+
匹配数字:Regex-test
以下代码匹配整个字符串并提取第一组:
gsub(".*(?<=, )(\\d+).*", "\\1", id, perl=TRUE)
检查代码段:R-gsub
答案 2 :(得分:1)
我们可以从字符串的开头([^,]*
)开始匹配零个或多个不是逗号(^
)的字符,后跟,
,一个或多个空格({ {1}})或\\s+
一个|
或空格后跟其他字符(-
)并将其替换为空白(.*
)
""
如果没有其他限制,则as.numeric(gsub("^[^,]*,\\s+|(-|\\s+).*", "", Sample.ID))
#[1] 2213 2213
可用于提取第一次出现的数字
str_extract
或library(stringr)
as.numeric(str_extract(Sample.ID, "\\d+"))
#[1] 2213 2213
parse_number
readr
或readr::parse_number(Sample.ID)
#[1] 2213 2213
base R
as.numeric(regmatches(Sample.ID, regexpr("\\d+", Sample.ID)))
#[1] 2213 2213