我怎么能通过gsub选择字符串?

时间:2016-05-11 03:11:30

标签: r gsub

我有这样的字符串:

df
[1] "XID\t5647: asasaasa" "XID\t1540"  

如何使用gsub选择“XID \ t”之后的数字? 我使用gsub如下:

gsub(".*XID\t(.*)\\:.*", "\\1", df)
>[1] "5647"     "XID\t1540"

gsub(".*XID\t(.*)", "\\1", df)
>[1] "5647: asasaasa" "1540" 

但我希望它是这样的:

[1] "5647" "1540" 

我认为案例是重叠的,所以我必须使用gsub两次,以便我可以像我想的那样选择它们。请把你的想法告诉我,谢谢你。

2 个答案:

答案 0 :(得分:4)

我们可以使用str_extract来匹配数字部分(\\d+

library(stringr)
str_extract(df, "\\d+")
#[1] "5647" "1540"

gsub与所有非数字(\\D+)匹配,并将其替换为""

gsub("\\D+", "", df)
#[1] "5647" "1540"

或者使用OP的语法匹配" XID \ t"后面的一个或多个数字(\\d+),将其捕获为一个组((...) )并用反引用(\\1)替换它。

sub(".*XID\t(\\d+).*", "\\1", df)
#[1] "5647" "1540"

数据

df <- c("XID\t5647: asasaasa", "XID\t1540" )

答案 1 :(得分:1)

只需用“”

替换不是数字的任何内容
x=c("XID\t5647: asasaasa", "XID\t1540" )
gsub("[^0-9]","",x)
#[1] "5647" "1540"