正则表达式R中的一行文本

gipsam 发布于 2019-03-09 r 最后更新 2019-03-09 14:39 3 浏览

我有这样的线路:

x<-c("System configuration: lcpu=96 mem=196608MB ent=16.00")
我需要等于ent的值并将其存储在R中的val对象中 我这样做似乎并没有工作。有任何想法吗?
 val<-x[grep("[0-9]$", x)]
已邀请:

psunt

赞同来自:

使用rex可以使这种类型的任务更简单一些。 请注意,此解决方案正确包含捕获中的.,以及G.Grothendieck的回答。

x <- c("System configuration: lcpu=96 mem=196608MB ent=16.00")
library(rex)
val <- as.numeric(
  re_matches(x,
    rex("ent=",
      capture(name = "ent", some_of(digit, "."))
      )
    )$ent
  )
#>[1] 16

et_sed

赞同来自:

使用sub

val <- sub('^.* ent=([[:digit:]]+)', '\\1', x)

ut_sed

赞同来自:

如果ent总是在最后那么:

sub(".*ent=", "", x)
如果没有,请在gsubfn package中尝试strapplyc,它只返回括号内正则表达式的部分:
library(gsubfn)
strapplyc(x, "ent=([.0-9]+)", simplify = TRUE)
它也可以使用strapply同时转换为数字:
strapply(x, "ent=([.0-9]+)", as.numeric, simplify = TRUE)