2014-10-16 60 views
2

我想一個字符串中提取4個整數字符串只整數,我試圖與^[[:digit:]]+[^0-9]+ [^\\d]+但無法找到準確的4位數的整數value.I採取下面的例子摘自R中

Expression="sqrt((sin(3501)*cos(3505))^2+sin(3509)^2+cos(3508)^2)+9999.990" 
sort(unique(na.omit(as.numeric(unlist(strsplit(Expression, "[^0-9]+")))))) 
[1] 2 9999 990 3501 3505 3508 3509 

我想輸出爲3501 3505 3508 3509。任何幫助,任何好的鏈接準備正則表達式在R,謝謝。

回答

4

你可以使用下面的代碼,

> Expression="sqrt((sin(3501)*cos(3505))^2+sin(3509)^2+cos(3508)^2)+9999.990" 
> m <- gregexpr("\\(\\K\\d{4}(?=\\))", Expression, perl=TRUE) 
> regmatches(Expression, m) 
[[1]] 
[1] "3501" "3505" "3509" "3508" 

說明:

  • \(匹配文字(符號。
  • \K放棄打印之前匹配的字符。所以在我們的例子中,它放棄了以前匹配的(符號。
  • \d{4}恰好匹配四位數。
  • (?=\))肯定前瞻斷言在四位數後面的字符必須是右括號。

OR

> Expression="sqrt((sin(3501)*cos(3505))^2+sin(3509)^2+cos(3508)^2)+9999.990" 
> m <- gregexpr("(?<![.\\d])\\d{4}(?![.\\d])", Expression, perl=TRUE) 
> regmatches(Expression, m) 
[[1]] 
[1] "3501" "3505" "3509" "3508" 
+0

哇,已經給+1只是出於好奇,什麼是 「K」 做在這裏? – PKumar 2014-10-16 12:46:32

+0

只是一分鐘...... – 2014-10-16 12:46:52

+1

你可以用lookbehind而不是'\ K',就像'(?<= \\()' – 2014-10-16 13:00:00