在R中如何去除国名列表中的多余空格、特殊字符与无效文本?
问题原因
你最后一步空格匹配的正则存在语法错误:尾部空格匹配的[[space:]]多了一层多余的方括号,POSIX空白字符类的标准写法是[[:space:]],错误的写法导致规则没有生效。这也是你测试trimws()没有生效的大概率原因——你之前可能把trimws()放在了正则替换之前,或者变量引用错误。
解决方案
方案1:修正原有写法
# 修正正则的字符类写法 name <- gsub("\\([^\\)]*\\)", "", country.names) %>% gsub("\\*", "", .) %>% gsub("^[[:space:]]+|[[:space:]]+$", "", .)
如果想用trimws()简化写法,放在最后一步即可:
name <- gsub("\\([^\\)]*\\)", "", country.names) %>% gsub("\\*", "", .) %>% trimws(which = "both")
方案2:一步合并替换(更高效)
可以把所有需要删除的内容合并到同一条正则规则,省去多步管道:
name <- gsub("^\\s+|\\s*\\*?\\s*\\(.*?\\)|\\s+$", "", country.names)
规则逻辑:
- 匹配开头所有空白字符
- 匹配括号及括号前可选的空白、特殊字符
*,以及括号内的国家代码 - 匹配结尾所有空白字符
输出效果
用你提供的10条测试数据运行后,输出结果如下:
[1] "United States" "China" "Japan" "Great Britain" "ROC" [6] "Australia" "Netherlands" "France" "Germany" "Italy"
内容的提问来源于stack exchange,提问作者data_life
相关产品推荐
相关产品推荐

