我想在字符串中提取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中正则表达式的好链接,谢谢。
答案 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"