在 Google 电子表格中查找和删除所有表情符号

Finding and Deleting All Emojis in a Google Spreadsheet

我有一个 Google 电子表格,其中包含数千个单元格,每个单元格都填充了包含许多不同表情符号的字符串。

条目示例:

"Lol ","Haha ","Fire ","Awesome!","Nice See you tomorrow!", "こんニちは", "你好"

但是我想删除所有表情符号,有没有搜索功能可以run/piece电子表格代码我可以运行使文档没有表情符号?

假设您所有的文本字符串都是单个单词,然后是 space,然后是表情符号,您可以使用公式

=LEFT(A1,(FIND(" ",A1,1)-1))

这将仅 return 单元格的文本内容(本例中为 A1)。 如果您的所有数据都在一个列中,您只需下拉,这将适用于您的所有数据。

使用正则表达式清理

我没有时间做所有事情,但这会给你一个开始。我用这个清理了一个牢房里的所有东西。

var sht = SpreadsheetApp.getActiveSheet();
  var text = sht.getActiveCell().getValue();
  var cleantext = text.replace(/[^\s\w]/g,'');//replace everything that's not whitespace or word characters with null
  sht.getActiveCell().setValue(cleantext);

我用你提供的线作为测试数据。诚然,它需要稍微调整一下,因为它去掉了一些标点符号。

这个好一点。

function test()
{
  var sht = SpreadsheetApp.getActiveSheet();
  var text = sht.getActiveCell().getValue();
  var cleantext = text.replace(/[^\s\w"!,]/g,'');//added "!,
  sht.getActiveCell().setValue(cleantext);

}

因此,当您 运行 它时,您可能想要添加更多字符以不替换列表。而已。

我有一份费用报告,用于收集不同类别的费用,我喜欢制作饼图以帮助我全面了解我的钱去向。我使用这个数组公式来帮助我将信息收集到对我有用的类别中。

=ArrayFormula(IF(Row(C:C)=1,"Title",IF(LEN(C:C),IF(REGEXMATCH(C:C,"(?i)(string1|string2|string3|string4)"),D:D,""),)))

正则表达式提供了一个或功能,用于为我想要收集到这些类别中的费用清单上出现的意外项目添加额外匹配。如果您需要另一个匹配项,您只需进入该公式并添加另一个项,如下所示

(string1|string2|string3|string4||string5)

字符串被替换为不带引号的实际术语,除非它们在搜索目标中有引号。

下面是一些代码,它遍历一列数据并从每个单元格中删除表情符号。

您必须将 Your Sheet Tab Name 替换为代码应该处理的 sheet 选项卡名称。此代码目前仅处理一列数据。整列值在一次写入操作中写回 sheet。任何 5 个或更多字符的字符代码都被假定为表情符号。

先在几行数据上进行测试。

function killEmojies() {
  var arrayThisRow,columnOfValues,columnToRemoveEmojiesFrom,firstTwoChar,
      i,innerArray,j,L,newCellContent,outerArray,
      ss,sh,
      targetSheet,thisCell,thisCellChar,thisCellVal,thisCharCode,thisCharCodeLength;

  columnToRemoveEmojiesFrom = 1;
  outerArray = [];

  ss = SpreadsheetApp.getActiveSpreadsheet()
  sh = ss.getSheetByName("Your Sheet Tab Name Here");
  targetSheet = ss.getSheetByName("Your Sheet Tab Name Here");

  columnOfValues = sh.getRange(1, columnToRemoveEmojiesFrom,sh.getLastRow(),1).getValues(); 
  L = columnOfValues.length;
  Logger.log('L: ' + L);

  for (i=0;i<L;i++) {

    thisCell = columnOfValues[i];//Get inner array
    thisCellVal = thisCell[0];//Get first element of inner array

    Logger.log(thisCellVal)
    Logger.log('typeof thisCellVal: ' + typeof thisCellVal)

    newCellContent = "";//Reset for every cell
    innerArray = [];//Reset for every row loop

    if (typeof thisCellVal !== 'string') {//This spreadsheet cell contains something
      //other than text
      innerArray.push(thisCellVal);
    } else {
      for (j=0;j<thisCellVal.length;j++) {//Loop through every character in the cell
        thisCellChar = thisCellVal[j];
        thisCharCode = thisCellChar.charCodeAt(0);//Character code of this character
        thisCharCodeLength = thisCharCode.toString().length;

        Logger.log('typeof thisCharCodeLength: ' + typeof thisCharCodeLength);
        Logger.log('this val: ' + thisCharCode);
        Logger.log('thisCharCodeLength: ' + thisCharCodeLength);
        Logger.log(thisCharCodeLength < 5);

        if (thisCharCodeLength === 5) {
          firstTwoChar = thisCharCode.toString().slice(0,2);
          Logger.log('firstTwoChar: ' + firstTwoChar)

        }

        if (thisCharCodeLength > 4 && (firstTwoChar === "54" || firstTwoChar === "55" || firstTwoChar === "56")) {
          continue;//exclude character codes that are 5 or more characters long
          //and start with 54 or 55
        }
        newCellContent = newCellContent + thisCellChar;

      }

      innerArray.push(newCellContent);
    }

    outerArray.push(innerArray);
  }

  targetSheet.getRange(1, columnToRemoveEmojiesFrom,outerArray.length,1).setValues(outerArray);
}

替换文本中的表情符号

我发现,您可以为此使用 REGEXREPLACE

要替换 [A1] 中的所有表情符号,请尝试:

=REGEXREPLACE($A,"[©®‼⁉™ℹ↔-↙↩-↪⌚-⌛⌨⏏⏩-⏳⏸-⏺Ⓜ▪-▫▶◀◻-◾☀-☄☎☑☔-☕☘☝☠☢-☣☦☪☮-☯☸-☺♀♂♈-♓♟-♠♣♥-♦♨♻♾-♿⚒-⚗⚙⚛-⚜⚠-⚡⚧⚪-⚫⚰-⚱⚽-⚾⛄-⛅⛈⛎-⛏⛑⛓-⛔⛩-⛪⛰-⛵⛷-⛺⛽✂✅✈-✍✏✒✔✖✝✡✨✳-✴❄❇❌❎❓-❕❗❣-❤➕-➗➡➰➿⤴-⤵⬅-⬇⬛-⬜⭐⭕〰〽㊗㊙-----------------------------------------------#️⃣*️⃣0️⃣1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣]","")

我相信这个正则表达式会从您的文本中找到所有 current emojis

备注:

  • 有些表情符号是复合的,例如宇航员是‍。正则表达式只需要查找实心字符,因此将包括所有复合表情符号。

  • 我试图缩短解决方案,并在 RegEx 中使用了实际的表情符号。您可能还会看到更多“类似计算机”的解决方案:[\u1F60-\u1F64]|[\u2702-\u27B0]...。这些解决方案改用表情符号代码。

  • 给出了另一个有趣的选项。删除所有不可打印的字符:=REGEXREPLACE(A1,"[[:print:]]","")

  • 包括皮肤: