我需要使用gsub
对正则表达式提供一点帮助。拿这个对象:
x <- "4929A 939 8229"
我想删除“A”和“9”之间的空格,但我不确定如何只匹配它们之间的空间而不是第二个空格。我基本上需要这样的东西:
x <- gsub("A 9", "", x)
但我不知道如何编写正则表达式以匹配“A”和“9”以及它们之间的空格。
提前致谢!
答案 0 :(得分:2)
您可以在sub
中使用以下正则表达式:
> x <- "4929A 939 8229"
> sub("\\s+", "", x)
[1] "4929A939 8229"
\\s+
将匹配1个或多个空白符号。
替换部分是空字符串。
答案 1 :(得分:2)
gsub
匹配/使用找到的所有正则表达式,而sub
仅匹配/使用第一个正则表达式。所以
sub(" ", "", "4929A 939 8229") # returns "4929A939 8229"
将完成这项工作
删除第二次/第n次出现
你可以这样做,例如使用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"