我需要一些关于使用gsub的正则表达式的帮助。把这个东西拿出来:
x <- "4929A 939 8229"
我想删除"A“和"9”之间的空格,但我不知道如何在它们之间的空间上匹配,而不是在第二个空间上。我基本上需要这样的东西:
x <- gsub("A 9", "", x)
但是,我不知道如何编写正则表达式,使之与"A“和"9”不匹配,而只是它们之间的空格。
提前感谢!
发布于 2016-12-08 21:00:30
您可以在sub中使用以下正则表达式
> x <- "4929A 939 8229"
> sub("\\s+", "", x)
[1] "4929A939 8229"\\s+将匹配一个或多个空格符号。
替换部分是空字符串。
见在线R演示
发布于 2016-12-08 21:01:13
gsub匹配/使用找到的所有正则表达式,而sub只匹配/使用第一个正则表达式。所以
sub(" ", "", "4929A 939 8229") # returns "4929A939 8229"会做这件事
去除第二/第九次
您可以这样做,例如使用strsplit,如下所示:
x <- c("4929A 939 8229", "4929A 9398229")
collapse_nth <- function(x_split, split, nth, replacement){
left <- paste(x_split[seq_len(nth)], collapse = split)
right <- paste(x_split[-seq_len(nth)], collapse = split)
paste(left, right, sep = replacement)
}
remove_nth <- function(x, nth, split, replacement = ""){
x_split <- strsplit(x, split, fixed = TRUE)
x_len <- vapply(x_split, length, integer(1))
out <- x
out[x_len>nth] <- vapply(x_split[x_len>nth], collapse_nth, character(1), split, nth, replacement)
out
}这给了你:
# > remove_nth(x, 2, " ")
# [1] "4929A 9398229" "4929A 9398229"和
# > remove_nth(x, 2, " ", "---")
# [1] "4929A 939---8229" "4929A 9398229" https://stackoverflow.com/questions/41048681
复制相似问题