所以可以说我有这个字符串
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”的第一个问题,我不知道。有人可以帮助我解决这些问题吗?
在我所在的地区,我们使用;而不是公式中的
答案 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(...)
-获取结果字符串的长度。