2012-10-17 19 views
1

我帶話的串以下列方式:有一個簡單的辦法讓子中的R?

word="xyz9874" 
pattern="[0-9]+" 
x=gregexpr(pattern,word) 
substr(word,start=x[[1]],stop=x[[1]]+attr(x[[1]],"match.length")-1) 
[1] "9874" 

有沒有更簡單的方式來獲得結果中的R?

回答

3

當然,使用gsub和逆向引用:

gsub(".*?([0-9]+).*", "\\1", word) 

說明:在大多數regex實現,\1是背面參考相匹配的第一個子模式。子模式用括號括起來。在R,你需要轉義反斜線不論報價的類型,您使用的標記。

問號,「擴展」的正則表達式的一個成語是指給定的正則表達式模式不應該是貪婪的,換句話說 - 它應該儘可能少的字符串作爲可能的。 Othrewise,在模式.*([0-9]+).*將匹配xyz987([0-9]+)將匹配4。或者,我們可以寫

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

但我們有一個字符串以數字開頭的問題。

順便說一句,注意,不是[0-9]你可以寫\d,或者,其實\\d

gsub(".*?(\\d+).*", "\\1", word) 
相關問題