R语言stringr包str_remove_all正则表达式移除指定字符失败求助
问题原因
你写的正则语法使用错误:方括号[]在正则中是字符集语法,仅能匹配单个字符,你写在方括号内的|、(等符号都会被识别为普通单个字符进行匹配,完全达不到匹配NA、.1这类多字符子串的效果。
解决方案
正则中匹配多个不同规则的内容,直接用|分隔不同规则即可,不需要加外层方括号。另外注意.是正则中的特殊通配符,要匹配普通的.需要加转义符\\。
你需要匹配的内容中,所有字母可以用R正则专用语法[[:alpha:]]匹配,子串.1转义后写为\\.1,你需求中提到的子串NA本身由字母组成,已经包含在[[:alpha:]]的匹配范围内,不需要额外单独配置。
正确代码如下:
library(stringr) t_chart <- 'X201A61NA231.1W' t_chart %>% str_remove_all("[[:alpha:]]|\\.1")
运行后输出结果为"20161231",符合预期要求。如果需要明确标注所有规则,也可以把正则写为[[:alpha:]]|\\.1|NA,运行结果完全一致。
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

