仅从R中的字符串中提取整数

时间:2014-10-16 12:35:26

标签: regex r gsub

我想在字符串中提取4位整数,我尝试过^[[:digit:]]+[^0-9]+ [^\\d]+但无法找到准确的4位整数值。我采用了以下示例

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中正则表达式的好链接,谢谢。

1 个答案:

答案 0 :(得分: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}正好匹配四位数字。
  • (?=\))正向前瞻断言四位数后面的字符必须是右括号。

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