在 gsub 之后仅提取数字的第一次出现
Extract only first appearance of number after gsub
我有这样一个字符串:
Sample.ID<-"(<SampleID>, 2213 )"
我正在使用以下 gsub 代码从此字符串中提取数字:
ID<-as.numeric(gsub("\D", "", Sample.ID))
这没问题,但有时在我的数据中字符串是这样的:
Sample.ID<-"(<SampleID>, 2213-EQUINOX BELL 2-P, )"
然后我遇到了一个问题,因为它占用了我只想拥有 2213 的所有数字(即 22132)。
解决方法是什么?
谢谢,
芳
我们可以从字符串的开头 (^
) 开始匹配零个或多个不是逗号 ([^,]*
) 的字符,后跟一个 ,
,一个或多个 space (\s+
) 或 |
一个 -
或 space 后跟其他字符 (.*
) 并将其替换为空白 (""
)
as.numeric(gsub("^[^,]*,\s+|(-|\s+).*", "", Sample.ID))
#[1] 2213 2213
如果没有其他限制,那么str_extract
可以用来提取第一个出现的number
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
数据
Sample.ID <- c("(<SampleID>, 2213 )", "(<SampleID>, 2213-EQUINOX BELL 2-P, )")
您可以捕获数字,然后使用反向引用
sub(".*?(\d+).*", "\1", Sample.ID)
[1] "2213" "2213"
因为你的数据看起来像
Sample.ID<-"(<SampleID>, 2213-EQUINOX BELL 2-P, )"
使用(?<=, )\d+
匹配号码:Regex-test
以下代码匹配整个字符串并提取第一组:
gsub(".*(?<=, )(\d+).*", "\1", id, perl=TRUE)
检查代码段:R-gsub
我有这样一个字符串:
Sample.ID<-"(<SampleID>, 2213 )"
我正在使用以下 gsub 代码从此字符串中提取数字:
ID<-as.numeric(gsub("\D", "", Sample.ID))
这没问题,但有时在我的数据中字符串是这样的:
Sample.ID<-"(<SampleID>, 2213-EQUINOX BELL 2-P, )"
然后我遇到了一个问题,因为它占用了我只想拥有 2213 的所有数字(即 22132)。 解决方法是什么?
谢谢, 芳
我们可以从字符串的开头 (^
) 开始匹配零个或多个不是逗号 ([^,]*
) 的字符,后跟一个 ,
,一个或多个 space (\s+
) 或 |
一个 -
或 space 后跟其他字符 (.*
) 并将其替换为空白 (""
)
as.numeric(gsub("^[^,]*,\s+|(-|\s+).*", "", Sample.ID))
#[1] 2213 2213
如果没有其他限制,那么str_extract
可以用来提取第一个出现的number
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
数据
Sample.ID <- c("(<SampleID>, 2213 )", "(<SampleID>, 2213-EQUINOX BELL 2-P, )")
您可以捕获数字,然后使用反向引用
sub(".*?(\d+).*", "\1", Sample.ID)
[1] "2213" "2213"
因为你的数据看起来像
Sample.ID<-"(<SampleID>, 2213-EQUINOX BELL 2-P, )"
使用(?<=, )\d+
匹配号码:Regex-test
以下代码匹配整个字符串并提取第一组:
gsub(".*(?<=, )(\d+).*", "\1", id, perl=TRUE)
检查代码段:R-gsub