正则表达式和str_remove_all in R-仅当满足多个条件时才删除字

正则表达式和str_remove_all in R-仅当满足多个条件时才删除字,r,regex,R,Regex,我正在尝试根据以下条件删除国家/地区名称的所有实例: 国家名称不在字符串开头 国家/地区名称不在“of”之后 所以如果我用一个虚构的字符串: 澳大利亚国民银行澳大利亚银行 我只想删除粗体突出显示的澳大利亚实例 我使用str_remove_all将折叠的国家名称字符串传递给公司名称向量 country <- data.frame(name = c("Australia", "Singapore", "Malaysia")) %>% mutate(name_regex = paste0(

我正在尝试根据以下条件删除国家/地区名称的所有实例:

  • 国家名称不在字符串开头

  • 国家/地区名称不在“of”之后

  • 所以如果我用一个虚构的字符串: 澳大利亚国民银行澳大利亚银行

    我只想删除粗体突出显示的澳大利亚实例

    我使用str_remove_all将折叠的国家名称字符串传递给公司名称向量

    country <- data.frame(name = c("Australia", "Singapore", "Malaysia")) %>%
    mutate(name_regex = paste0("((?<!^)\\b", name, "\\b", "|(?<!of\\s)\\b", name, "\\b)"))
    
    country_remove <- str_c(country$name_regex, collapse = "|")
    
    str_remove_all(x, regex(country_remove, ignore_case = T))
    
    country%
    
    mutate(name_regex=paste0)(((?您应该像这样构建正则表达式:

    country <- data.frame(name = c("Australia", "Singapore", "Malaysia"))
    name_regex <- paste0("\\b(?<!of\\s)(?<!^)(?:", paste(country$name, collapse="|"), ")\\b")
    s <- "Australia National Australia Bank of Australia"
    str_remove_all(s, regex(name_regex, ignore_case=TRUE))
    ## => [1] "Australia National  Bank of Australia"
    
    国家
    这个图案看起来像

    \b(?<!of\s)(?<!^)(?:Australia|Singapore|Malaysia)\b
    
    \b(?)?
    看

    详细信息

    • \b
      -单词边界
    • (?-no
      的当前位置左侧不允许有空格
    • (?-不允许在当前位置开始字符串位置
    • (?:澳大利亚|新加坡|马来西亚)
      -任何替代品
    • \b
      -单词边界

    生成数据帧的代码不起作用。能否将您的数据作为dput共享?@WiktorStribiż新解决方案非常完美。非常感谢。
    \b(?<!of\s)(?<!^)(?:Australia|Singapore|Malaysia)\b