在R语言中如何使用[:alnum:]取反字母数字字符并重写正则表达式
错误原因
R中使用POSIX字符类时,必须将字符类标识嵌套在双层方括号内,你写的[^:alnum:]只会匹配字符:、a、l、n、u、m之外的字符,完全不符合匹配非字母数字的预期。
适配需求的正确实现
你原有正则的规则是保留大小写字母、数字、空格、冒号、带重音的拉丁字符À-ÿ,现在新增要求移除所有空格和下划线,使用[:alnum:]的正确写法如下:
starwars %>% mutate(name = str_replace_all(name, "[^[:alnum:]À-ÿ:]", ""))
规则说明
[:alnum:]嵌套在方括号内才会生效,匹配当前locale下的所有字母和数字- 额外补充
À-ÿ范围是为了避免部分默认locale不识别带重音的拉丁字符,确保和你原有正则的匹配范围一致 - 正则中没有加入空格、下划线的保留规则,因此这两类字符会被自动匹配替换为空,符合你的需求
内容的提问来源于stack exchange,提问作者Dario Lacan
相关产品推荐
相关产品推荐

