适用于COUNTIF的Google表格模式匹配/ RegEx

Mar*_*tin 14 regex pattern-matching google-sheets

谷歌工作表模式匹配的文档没有帮助.我一直在阅读和搜索一段时间,但找不到这个特殊问题.也许我很难找到正确的搜索条件,但问题是:

我有几个遵循这种格式的数字(部件号):## - ####

类别可以通过部件号定义,即:50-03 ##将是一个产品类别,其余2个数字是特定于模型的.

我一直试图运行这个:

=countif(E9:E13,"50-03[123][012]*")
Run Code Online (Sandbox Code Playgroud)

(E9:e13包含格式化为文本的部件号.如果我以任何其他方式格式化,则值会显示,因为谷歌表认为我正在写日期或尝试算术.)

每次返回0,除非我改为:

=countif(E9:E13,"50-03*")
Run Code Online (Sandbox Code Playgroud)

所以它看起来像通配符,但模式匹配不行?

Rob*_*ach 15

如您所述,Wiktor提到COUNTIF只支持通配符.

有很多方法可以做你想要的,仅举两个例子

=ArrayFormula(SUM(--REGEXMATCH(E9:E13, "50-03[123][012]*")))

=COUNTA(FILTER(E9:E13, REGEXMATCH(E9:E13, "50-03[123][012]*")))
Run Code Online (Sandbox Code Playgroud)

  • 这不计算单元格内的多次出现。 (3认同)
  • 即使没有匹配,`COUNTA()`方法也计算 1 (3认同)

Mic*_*ael 6

对于像你这样的问题来说,这是一个非常大的锤子,但你可以用来QUERY做这样的事情:

=QUERY(E9:E13, "select count(E) where E matches '50-03[123][012]' label count(E) ''")
Run Code Online (Sandbox Code Playgroud)

label位用于防止QUERY向列添加自动标题count()

这种方法的好处是您也可以引入其他列。假设在 H 列中,每个零件都有多个订单。然后,您可以使用两个单元格并显示零件数和订单总和:

=QUERY(E9:H13, "select count(E), sum(H) where E matches '50-03[123][012]' label count(E) '', sum(H) ''")
Run Code Online (Sandbox Code Playgroud)

我经常发现这个问题$searchEngine,但没有注意到我将另一个问题与类似问题和其他相关答案链接起来。