使用 R 将字符串替换为空字符串,但某些单词除外

Replace string with empty string except certain word using R

美好的一天,我想对除 INDIVIDUAL/BUSINESS 之外的所有带有“”的字符串进行 gsub,然后在名为 business_type 的新列中进行变异。我尝试了很多方法但都失败了。提前致谢。

text <- c("|Name:James Indiana|type:INDIVIDUAL|Id::G123456789&M|Location:Indonesia|", "|Name:James Bond|type:BUSINESS|Id::G&987654321M|Location:Indonesia|")

输出会是这样

business_type    
INDIVIDUAL    
BUSINESS

我正在使用

mutate(business_type = gsub("[^(\bINDIVIDUAL\b)(\bBUSINESS\b)]+"," ",x)

此方法删除其他字符串,但从其他字符串中排除一些大写字母。

mutate(business_type = gsub("^/(?!INDIVIDUAL$)(?!BUSINESS$)[a-z0-9A-Z:&|]+=$"," ",x)

也没有。我也尝试 ^/(?!ignoreme)([a-z0-9]+)$ 正则表达式,但它不起作用。

您可以使用str_extract提取您感兴趣的词。

stringr::str_extract(text, 'INDIVIDUAL|BUSINESS')
#[1] "INDIVIDUAL" "BUSINESS" 

在基础 R 中,

regmatches(text, regexpr('INDIVIDUAL|BUSINESS', text))

您可以使用

mutate(business_type = gsub("\b(?:INDIVIDUAL|BUSINESS)\b(*SKIP)(*F)|(?s)."," ",x, perl=TRUE)

参见regex demo

正则表达式详细信息:

  • \b(?:INDIVIDUAL|BUSINESS)\b - 匹配 INDIVIDUALBUSINESS 作为整个单词和
  • (*SKIP)(*F) - 跳过匹配,从失败的位置继续匹配
  • | - 或
  • (?s). - 匹配任何字符,包括换行字符((?s) 是一个单行标志,使 . 匹配 PCRE 正则表达式中的任何字符)。