首页 > 解决方案 > 谷歌表格,计算都是大写的单词,并且有一定的长度

问题描述

所以可以说我有这个字符串

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”的第一个问题,我不知道。有人能帮我解决这些问题吗?

在我所在的地区,我们使用 ; 而不是 , 在公式中

标签: regexgoogle-sheetsformula

解决方案


如果您只需要使用 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$0where$0引用整个匹配值)
  • REGEXREPLACE(...,"(^|[[:punct:][:space:]])[A-ZА-ЯЁ]{3,}($|[[:punct:][:space:]])", "§"))- 替换为§所有情况
    • (^|[[:punct:][:space:]])- 字符串开头或任何标点符号或空格字符
    • [A-ZА-ЯЁ]{3,}- 3 个或更多大写 ASCII 或俄语大写字母
    • ($|[[:punct:][:space:]])- 字符串结尾或任何标点符号或空格字符
  • REGEXREPLACE(...,"[^§]+","")- 删除一个或多个字符的所有块,除了§
  • =LEN(...)- 获取结果字符串的长度。

推荐阅读