从R语言字符串向量中提取数字与运算符的问题
解决R语言中移除Unicode字母的问题
你用gsub("[:alpha:]", "", vec)没生效的原因是:POSIX字符类[:alpha:]只匹配ASCII范围内的字母(也就是A-Z、a-z),但你的向量里有ä、Ü这类带变音符号的Unicode字母,这类字符不在[:alpha:]的匹配范围内,所以没被移除。
要实现移除所有字母(包括Unicode字母)并保留数字和运算符,同时去掉多余空格,可以用以下两种方法:
方法1:使用基础R的Unicode正则属性
直接用\\p{L}匹配所有Unicode字母,同时把空格也替换掉:
vec <- c("a + 17", "äÜ - 20*3") result <- gsub("\\p{L}|\\s", "", vec) result # 输出:[1] "17" "-20*3"
方法2:使用stringi包(Unicode支持更友好)
如果经常处理多语言字符,推荐用stringi包,它对Unicode的支持更完善:
library(stringi) vec <- c("a + 17", "äÜ - 20*3") result <- stri_replace_all_regex(vec, "[\\p{L}\\s]", "") result # 输出:[1] "17" "-20*3"
两种方法都能得到你期望的结果,核心是用\\p{L}覆盖所有类型的字母字符,同时清理掉无关的空格。
内容的提问来源于stack exchange,提问作者LulY
相关产品推荐
相关产品推荐

