Google表格,计算全部为大写且一定长度的单词

时间:2018-09-03 07:18:37

标签: regex google-sheets formula

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

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

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

1 个答案:

答案 0 :(得分: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(...)-获取结果字符串的长度。