首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >特定字符之间空格的R匹配和子匹配

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

Stack Overflow用户
提问于 2016-12-08 20:58:03
回答 2查看 37关注 0票数 0

我需要一些关于使用gsub的正则表达式的帮助。把这个东西拿出来:

x <- "4929A 939 8229"

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

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

但是,我不知道如何编写正则表达式,使之与"A“和"9”不匹配,而只是它们之间的空格。

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-08 21:00:30

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

代码语言:javascript
运行
复制
> x <- "4929A 939 8229"
> sub("\\s+", "", x)
[1] "4929A939 8229"

\\s+将匹配一个或多个空格符号。

替换部分是空字符串。

在线R演示

票数 2
EN

Stack Overflow用户

发布于 2016-12-08 21:01:13

gsub匹配/使用找到的所有正则表达式,而sub只匹配/使用第一个正则表达式。所以

代码语言:javascript
运行
复制
sub(" ", "", "4929A 939 8229") # returns "4929A939 8229"

会做这件事

去除第二/第九次

您可以这样做,例如使用strsplit,如下所示:

代码语言:javascript
运行
复制
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
}

这给了你:

代码语言:javascript
运行
复制
# > remove_nth(x, 2, " ")
# [1] "4929A 9398229" "4929A 9398229"

代码语言:javascript
运行
复制
# > remove_nth(x, 2, " ", "---")
# [1] "4929A 939---8229" "4929A 9398229" 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41048681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档