2014-01-22 61 views
3

我想在R的字符串的開頭提取數字的字符串的開頭提取號碼,我已經試過這樣:從正則表達式

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

爲什麼返回整個字符串,而不是隻是數字?

回答

3

grep如果找到模式,則返回位置或(整個輸入的)值。

嘗試gsubgregexpr + regmatches代替:

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

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

我想出了:'GSUB( '[^ 0-9]', 「」,TT)'但阿南達的+1 –

+0

謝謝,當我可以接受這個答案... –

+0

@TylerRinker,不知道我會這麼說,但謝謝:-) – A5C1D2H2I1M1N2O1R2T1

2

1)子嘗試此其除去所述第一非數字和此後的一切:

> 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"