R匹配和特定字符之间的空间

时间:2016-12-08 20:58:04

标签: r regex string

我需要使用gsub对正则表达式提供一点帮助。拿这个对象:

x <- "4929A 939 8229"

我想删除“A”和“9”之间的空格,但我不确定如何只匹配它们之间的空间而不是第二个空格。我基本上需要这样的东西:

x <- gsub("A 9", "", x)

但我不知道如何编写正则表达式以匹配“A”和“9”以及它们之间的空格。

提前致谢!

2 个答案:

答案 0 :(得分:2)

您可以在sub中使用以下正则表达式:

> x <- "4929A 939 8229"
> sub("\\s+", "", x)
[1] "4929A939 8229"

\\s+将匹配1个或多个空白符号。

替换部分是空字符串。

请参阅online R demo

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