基于正则表达式的替换

Nur*_*mon 2 regex string r regex-lookarounds

R 相对较新,需要帮助应用基于正则表达式的替换。我在其中一列中有一个数据框,其中有一个数字序列(我感兴趣的值),后跟一个由各种字符组成的字符串。例子:

4623(randomcharacters)
Run Code Online (Sandbox Code Playgroud)

我需要删除初始数字后的所有内容以继续使用这些值。我的想法是使用 gsub 通过正向后视删除非数字字符。我的代码是:

sub_function <- function() {
  gsub("?<=[[:digit:]].", " ", fixed = T)
}


data_frame$`x` <- data_known$`x` %>% 
  sapply(sub_function)
Run Code Online (Sandbox Code Playgroud)

但我随后收到错误消息:

Error in FUN(X[[i]], ...) : unused argument (X[[i]])
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

Rui*_*das 5

这是一个基本的R函数。
它使用sub,而不是gsub,因为只有一个替换。无需回头看,元字符^标记字符串的开头,后跟可选的减号,后跟至少一位数字。其他一切都被丢弃。

sub_function <- function(x){
  sub("(^-*[[:digit:]]+).*", "\\1", x)
}

data <- data.frame(x = c("4623(randomcharacters)", "-4623(randomcharacters)"))

sub_function(data$x)
#[1] "4623"  "-4623"
Run Code Online (Sandbox Code Playgroud)

编辑

通过这个简单的修改,该函数返回一个数字向量。

sub_function <- function(x){
  y <- sub("(^-*[[:digit:]]+).*", "\\1", x)
  as.numeric(y)
}
Run Code Online (Sandbox Code Playgroud)