【问题标题】:How do I count all cells in a column that have emoji?如何计算具有表情符号的列中的所有单元格?
【发布时间】:2016-02-17 23:37:27
【问题描述】:

我的生产数据库中的表情符号有问题。由于它在生产中,我从中得到的只是一个自动生成的 Excel 电子表格 (.xls),它经常有数万行。我使用 Google 表格 对其进行解析,以便轻松分享结果。

我可以使用什么公式来计算列 n 中包含表情符号的所有单元格的数量?

例如:

Data
+----+-----------------+
| ID | Name            |
+----+-----------------+
| 1  | Chad            |
+----+-----------------+
| 2  | ✨Darla✨         |
+----+-----------------+
| 3  | John Smith      |
+----+-----------------+
| 4  | Austin ⚠️ Powers |
+----+-----------------+
| 5  | Missus ????        |
+----+-----------------+

Totals
+----------------------------------+---+
| People named Chad                | 1 |
+----------------------------------+---+
| People with emoji in their names | 3 |
+----------------------------------+---+

【问题讨论】:

    标签: google-sheets emoji formulas


    【解决方案1】:

    Ben C. R. Leggiero 编辑:

    =COUNTA(FILTER(A2:A6;REGEXMATCH(A2:A6;"[^\x{0}-\x{F7}]")))
    

    【讨论】:

    • 不会匹配数字、逗号、句点等吗?
    • 是的,它会的。这必须是正则表达式的一部分:[^A-Za-z.,0-9 ]
    • 好吧,把你的正则表达式改成更通用的东西,比如[^\x{0}-\x{F7}],我会接受这个答案
    • @daniel 没关系;真正的目的是我们拥有仅处理 ASCII 与来自 iPad 的用户输入交互的古老系统。
    • 感谢编辑!我将比较这三者的性能,然后再回复大家。
    【解决方案2】:

    这应该可行:

    =arrayformula(countif(REGEXMATCH(A2:A6,"[^a-zA-Z\d\s:]"),true))
    

    【讨论】:

    • 感谢您的简单回答!我将比较这三个的性能,然后再回复大家。
    【解决方案3】:

    您无法使用常规公式提取表情符号,因为 Google 电子表格使用轻量级 re2 正则表达式引擎,该引擎缺少 many features,包括查找表情符号所需的那些。

    您需要做的是创建自定义公式。选择工具菜单,然后选择脚本编辑器...。在脚本编辑器中,添加以下内容:

    function find_emoji(s) {
      var re = /[\u1F60-\u1F64]|[\u2702-\u27B0]|[\u1F68-\u1F6C]|[\u1F30-\u1F70]|[\u2600-\u26ff]|[\uD83C-\uDBFF\uDC00-\uDFFF]+/i;
      if (s instanceof Array) {
        return s.map(function(el){return el.toString().match(re);});
      } else {
        return s.toString().match(re);
      }
    }
    

    保存脚本。返回您的电子表格,然后测试您的公式=find_emoji(A1)

    我的测试产生以下结果:

    | Missus ?        | ?   |
    | Austin ⚠️ Powers | ⚠   |
    | ✨Darla✨        | ✨   |
    | joke ??        | ?? |
    

    而且,要计算没有表情符号的条目,您可以使用以下公式:

    =countif( arrayformula(isblank( find_emoji(filter(F2:F,not(isblank(F2:F)))))), FALSE)
    

    编辑

    我错了。您可以使用常规公式提取表情符号。正则表达式语法为[\x{1F300}-\x{1F64F}]|[\x{2702}-\x{27B0}]|[\x{1F68}-\x{1F6C}]|[\x{1F30}-\x{1F70}]|[\x{2600}-\x{26ff}]|[\x{D83C}-\x{DBFF}\x{DC00}-\x{DFFF}]

    【讨论】:

    • 你为什么使用[ab-yz]|[12-89]而不是[ab-yz12-89]呢?
    • 另外,我看到这里有很多操作。这个表现如何与其他答案相匹配?我正在检查的电子表格有数万行。
    • 这将取决于您到底需要什么。如果您只需要一个近似计数并且不介意外国名称的误报,那么更简单的正则表达式将起作用。如果您只想计算表情符号,但又想要性能,那么您需要将自定义公式更改为更具体的内容,以便您可以使用 =count_not_emoji(A3:A) 之类的内容
    • 答案已更新。常规公式可以做到这一点。无需自定义公式。
    • 我喜欢你的回答是多么彻底!我将比较这三者的性能,然后再回复大家。
    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多