使用正则表达式从字符串的开头提取数字

时间:2014-01-22 01:44:13

标签: regex r grep

我正在尝试提取R中字符串开头的数字。我试过这个:

> tt <- "51 - TS - Data estimated - see comments"
> grep('^[0-9]+', tt, value=T)
[1] "51 - TS - Data estimated - see comments"

为什么它返回整个字符串而不仅仅是数字?

2 个答案:

答案 0 :(得分:3)

如果找到模式,

grep将返回位置或值(整个输入的值)。

请尝试gsubgregexpr + regmatches

gsub("(^[0-9]+).*", "\\1", tt)
# [1] "51"

x <- gregexpr("^[0-9]+", tt)
regmatches(tt, x)
# [[1]]
# [1] "51"

答案 1 :(得分:2)

1)sub 尝试此操作,删除第一个非数字及其后的所有内容:

> sub("\\D.*", "", tt)
[1] "51"

2)strsplit 或者这个在非数字上分割并获取第一个这样的组件:

> strsplit(tt, "\\D")[[1]][1]
[1] "51"

3)strapplyc 或提取前导数字的内容:

> library(gsubfn)
> strapplyc(tt, "^\\d+", simplify = TRUE)
[1] "51"