仅在gs​​ub之后提取数字的第一次出现

时间:2018-02-07 05:26:46

标签: r regex gsub

我有一个这样的字符串:

Sample.ID<-"(<SampleID>, 2213 )"

我正在使用以下gsub代码从此字符串中提取数字:

ID<-as.numeric(gsub("\\D", "", Sample.ID))

这没关系,但有时在我的数据中字符串是这样的:

Sample.ID<-"(<SampleID>, 2213-EQUINOX BELL 2-P, )"

然后我有一个问题,因为它需要所有数字(即22132)我只想拥有2213。 什么是解决方法?

谢谢, PHUONG

3 个答案:

答案 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