You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在str_count中正确使用[:graph:]等正则辅助类统计唯一字符

问题解决方法

错误原因

你遇到的问题本质是str_count的用法和POSIX字符类的书写规则问题:

  • 原代码中str_count(x, "[:graph:]")会返回整个字符串里所有符合规则的字符的总出现次数,你对这个总次数判断>0,只会得到1个逻辑值,求和后自然恒为1(只要字符串存在符合规则的字符),无法统计唯一字符数量
  • POSIX字符类在正则表达式中使用时,需要包裹在额外的方括号内,正确写法为[[:graph:]],否则可能出现匹配异常

[[:graph:]]匹配所有可打印的非空白字符,包含字母、数字、标点符号,刚好符合你需要的匹配规则,空格等空白字符会被自动排除,和你原来手动指定letters, 0:9, "-"的匹配逻辑完全一致。

解决代码

library(tidyverse)
test <- data.frame(oe = c("A-1", "111", "-", "Sie befassen sich intensiv damit"))

test %>%
  mutate(unique_chars_correct = sapply(tolower(oe), function(x) sum(str_count(x, c(letters, 0:9, "-")) > 0)),
         # 基于[:graph:]的正确统计逻辑
         unique_chars_graph = sapply(tolower(oe), function(x) {
           # 拆分字符串为单个字符
           single_chars <- strsplit(x, split = "")[[1]]
           # 筛选符合[:graph:]规则的字符,去重后计数
           length(unique(single_chars[str_detect(single_chars, "[[:graph:]]")]))
         }))

输出结果

oe unique_chars_correct unique_chars_graph
1                              A-1                    3                  3
2                              111                    1                  1
3                                -                    1                  1
4 Sie befassen sich intensiv damit                   13                 13

内容的提问来源于stack exchange,提问作者deschen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:36:04