首页 > 解决方案 > 删除两个字符串之间的字符串

问题描述

假设我有以下向量:

df<- c("@Accessoires A-B [COLL]", "@Accessoires C-D [COLL]",
        "@Components A-D [COLL]","@Components [COLL]", 
        "@Accessoires [COLL]", "@Components H-Z [COLL]")

我想删除 AB 或 CD 等存在的字符串的中间部分。这是一个例子,在我的数据框中,字母组合有很多可能性。

所以所需的输出将是:

"@Accessoires [COLL]" 
"@Accessoires [COLL]" 
"@Components [COLL]"  
"@Components [COLL]"  
"@Accessoires [COLL]" 
"@Components [COLL]" 

我的问题是如何在 R 中实现这一点而无需定义所有字母组合?

标签: rregexstring

解决方案


您可以使用sub()和一些正则表达式:

sub("\\s[A-Z]-[A-Z]\\s", " ", df)
[1] "@Accessoires [COLL]" "@Accessoires [COLL]" "@Components [COLL]"  "@Components [COLL]" 
[5] "@Accessoires [COLL]" "@Components [COLL]" 

正则表达式归结为:

  • \\s: 一个空格
  • [A-Z]: 任何(英文)大写字母。

顺便说一句,你df是一个向量,但不是data.frame

df <- c(
  "@Accessoires A-B [COLL]", "@Accessoires C-D [COLL]","@Components A-D [COLL]",
  "@Components [COLL]", "@Accessoires [COLL]","@Components H-Z [COLL]"
)
is.data.frame(df)
[1] FALSE

推荐阅读