regex - 谷歌表格,计算都是大写的单词,并且有一定的长度
问题描述
所以可以说我有这个字符串
Testing CAP counter and LENGTH li mi TER
我有这个公式
=COUNTA(REGEXEXTRACT(D2; REPT(".* ([А-ЯA-Z]{3,})";COUNTA(SPLIT(REGEXREPLACE(D2;"([А-ЯA-Z]{3,})";"$");"$"))-1)))
预期的行为是它将计算所有大写但包含 3 个或更多字母的单词。
但例如,它不计算我的字符串中的“TER”。此外,如果在字符串中我这样写单词“cCOUNTER”,它会计算在内。
就第二个问题而言,我知道我缺少某种 a:
SPLIT(D2; " ")
那里的某个地方,但是当我尝试将其插入时,我不断收到不同的错误。
关于“TER”的第一个问题,我不知道。有人能帮我解决这些问题吗?
在我所在的地区,我们使用 ; 而不是 , 在公式中
解决方案
如果您只需要使用 ASCII 字符串,您可以使用一个简单的
=LEN(REGEXREPLACE(REGEXREPLACE(D2,"\b[[:upper:]]{3,}\b", "§"),"[^§]+",""))
where\b[[:upper:]]{3,}\b
匹配单词边界之间的 3+ 个大写字母单词。但是,您不能依赖\b
它不支持 Unicode。要启用 Unicode 字母支持,您需要使用(^|[[:punct:][:space:]])[A-ZА-ЯЁ]{3,}($|[[:punct:][:space:]])
,但在此之前,要确保找到所有连续匹配,您需要将所有现有分隔符加倍,即标点符号或空白字符:
=LEN(REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(A17, "[[:punct:][:space:]]","$0$0"),"(^|[[:punct:][:space:]])[A-ZА-ЯЁ]{3,}($|[[:punct:][:space:]])", "§"),"[^§]+",""))
我用作§
临时拆分字符,但您可以使用$
(就像您现在所做的那样)或任何其他不太可能出现在您的数据中的字符。
细节
REGEXREPLACE(A17, "[[:punct:][:space:]]","$0$0")
- 匹配任何标点符号或空格字符(带有[[:punct:][:space:]]
)并将其加倍(带有$0$0
where$0
引用整个匹配值)REGEXREPLACE(...,"(^|[[:punct:][:space:]])[A-ZА-ЯЁ]{3,}($|[[:punct:][:space:]])", "§"))
- 替换为§
所有情况(^|[[:punct:][:space:]])
- 字符串开头或任何标点符号或空格字符[A-ZА-ЯЁ]{3,}
- 3 个或更多大写 ASCII 或俄语大写字母($|[[:punct:][:space:]])
- 字符串结尾或任何标点符号或空格字符
REGEXREPLACE(...,"[^§]+","")
- 删除一个或多个字符的所有块,除了§
=LEN(...)
- 获取结果字符串的长度。
推荐阅读
- javascript - for循环中的UUIDV4不改变值
- docker - docker-compose 命令下载一些文件,需要很多时间
- c# - 实体框架未显示在 Mac 上的 Rider 中
- angular - 跳过所有 GET 请求的 http 拦截器
- webpack-dev-server - 如何修复 webpack 中的“Uncaught TypeError: Cannot read property 'call' of undefined”?
- java - 无法从命令提示符运行 xml 测试套件
- python - QTcpSocket readyRead 未发出
- python - 在 csv 文件中打印多行输出
- r - R:求解变量
- php - setFetchMode() 似乎没有工作并且没有返回对象?