注意: 在不支持包含的表情符号的系统上,此问题可能看起来很奇怪。
这是如何从字符串中删除表情符号的后续问题。
我想构建一个正则表达式,匹配在Mac OS X/iOS中可以输入的所有表情符号。
显然的Unicode块覆盖了大多数但并非全部这些表情符号:
维基百科提供了一个编译列表,其中包含在OS X Mountain Lion和iOS 6上可用的所有符号(Apple彩色Emoji),这看起来是一个很好的起点:(稍作更新)
people = '☺️✨✊✌✋☝❤'
nature = '⭐☀⛅☁⚡☔❄⛄'
objects = '☎⏳⌛⏰⌚✉✂✒✏⚽⚾⛳☕'
places = '⛪⛺⛲⛵⚓✈⚠⛽♨'
symbols = '1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣0️⃣#️⃣⬆️⬇️⬅️➡️↗️↖️↘️↙️↔️↕️◀️▶️↩️↪️ℹ️⏪⏩⏫⏬⤵️⤴️️♿️Ⓜ️㊙️㊗️⛔✳️❇️❎✅✴️➿♻️♈️♉️♊️♋️♌️♍️♎️♏️♐️♑️♒️♓️⛎©️®️™️❌‼️⁉️❗❓❕❔⭕✖️➕➖➗♠♥♣♦✔☑➰〰〽️◼️◻️◾️◽️▪️▫️⚫️⚪️⬜️⬛️'
emoji = people + nature + objects + places + symbols # all emoji combined
大多数字符只有一个代码点,将它们转换将会很容易:
- U+1F600 (咧嘴笑脸)
但是有些字符使用两个Unicode值进行编码:
- ☺️ U+263A U+FE0F (白色微笑脸, 变异选择器 16)
- U+1F1EF U+1F1F5 (区域指示符号字母 J / 区域指示符号字母 P)
- ⬛️ U+2B1B U+FE0F (黑色大方块 / 变异选择器 16)
甚至有一些字符有3个代码点:
️⃣ U+0023 U+FE0F U+20E3 (数字符号 / 变异选择器 16 / 组合封闭键帽)
(变异选择器 16 意味着“表情符号风格”)
我如何将此列表拆分为字符(而不是拆分组合字符),找到它们的代码点,并最终构建匹配它们的正则表达式?
正则表达式不必考虑大块内部的“缺失”字符,即如果上述4个Unicode块完全被覆盖,则可以。(如果我没有得到任何答案,我将自己回答,但也许有一个简单的解决方案)
U+1F1EF U+1F1F5(区域指示符号字母J / 区域指示符号字母P)
,这不是两个符号吗(在我的电脑上看起来是这样的)? - Mike H-R