谷歌表,计算所有资本的单词,并且是一定的长度

问题描述 投票:2回答:1

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

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”。此外,如果在字符串中我写这样的单词“cOUNTER”,它将计算它。

就第二个问题而言,我理解我错过了某种方式:

SPLIT(D2; " ")

在那里的某个地方,但是当我尝试将其插入时,我会一直遇到不同的错误。

关于“TER”的第一个问题,我不知道。有人能帮我解决这些问题吗?

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

regex google-sheets formula
1个回答
2
投票

如果您只需使用ASCII字符串,则可以使用简单的字符串

=LEN(REGEXREPLACE(REGEXREPLACE(D2,"\b[[:upper:]]{3,}\b", "§"),"[^§]+",""))

其中\b[[:upper:]]{3,}\b匹配单词边界之间的3+大写字母单词。但是,您不能依赖不支持Unicode的\b。要启用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,其中$0返回整个匹配值)
  • REGEXREPLACE(...,"(^|[[:punct:][:space:]])[A-ZА-ЯЁ]{3,}($|[[:punct:][:space:]])", "§")) - 取代§所有的情况 (^|[[:punct:][:space:]]) - 字符串或任何标点符号或空格字符的开头 [A-ZА-ЯЁ]{3,} - 3个或更多大写ASCII或俄语大写字母 ($|[[:punct:][:space:]]) - 字符串结尾或任何标点符号或空白字符
  • REGEXREPLACE(...,"[^§]+","") - 移除除§之外的一个或多个字符的所有块
  • =LEN(...) - 获取结果字符串的长度。
© www.soinside.com 2019 - 2024. All rights reserved.