【问题标题】:Extract only integer from a string in R从R中的字符串中仅提取整数
【发布时间】:2014-10-16 12:35:25
【问题描述】:

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

【问题讨论】:

    标签: regex r gsub


    【解决方案1】:

    你可以使用下面的代码,

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

    【讨论】:

    • 哇,已经给+1了,只是为了好奇,“K”在这里做什么?
    • 你可以使用lookbehind代替\K,比如(?&lt;=\\()
    • 如果 4 位数字不在括号内() 那么上面的行不通? Expression="sqrt((sin(3501)*cos(3505))^2+sin(3509)^2+cos(3508)^2)+9999.990*1234"
    猜你喜欢
    • 2019-09-14
    • 2021-07-18
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多