我正试图从我的Python字符串中删除所有表情符号,包括澳门的表情符号。我已经从表情符号库中尝试了几个标准的正则表达式和正则表达式,但是没有成功删除它。 我的代码:
def remove_emoji(text):
emoji_pattern = re.compile(
u"(\ud83d[\ude00-\ude4f])|" # emoticons
u"(\ud83c[\udf00-\uffff])|" # symbols & pictographs (1 of 2)
u"(\ud83d[\u0000-\uddff])|" # symbols & pictographs (2 of 2)
u"(\ud83d[\ude80-\udeff])|" # transport & map symbols
u"(\ud83c[\udde0-\uddff])" # flags (iOS)
"+", flags=re.UNICODE)
return emoji_pattern.sub('', text)
答案 0 :(得分:2)
这听起来有点像自我推销,但我有一个可以做到这一点的Python库(除此之外)。该库是cucco,基本上你可以这样做:
from cucco import Cucco
cucco = Cucco()
cucco.replace_emojis('Your text')
不确定这是否适合您,但如果您可以试一试并让我知道结果会很好。我总是乐于接受反馈,所以我可以改进库;)
答案 1 :(得分:1)
您的模式似乎并不表示您要定位的旗帜表情符号(可能还有其他字形)。
例如,删除标志:
def remove_emoji(text):
emoji_pattern = re.compile(
u'(\U0001F1F2\U0001F1F4)|' # Macau flag
u'([\U0001F1E6-\U0001F1FF]{2})|' # flags
u'([\U0001F600-\U0001F64F])' # emoticons
"+", flags=re.UNICODE)
return emoji_pattern.sub('', text)
注意大写字母U(\U
)转义表示32位十六进制值。标志和表情符号在高Unicode值中方式。另外,标志看起来特别复杂,因为它们是双码点组合。一旦你有了正确的角色(如澳门国旗所示),你可以扩展一个字符集(这里用Regional Indicator Symbols的所有对的表达式进行演示。
您还可以开始添加其他表情符号和符号的说明;这里例如为基本的表情块做了。
根据上述定义:
flag = '\U0001F1F2\U0001F1F4'
emote = '\U0001F620'
print("flag: {!r} gone: {!r}".format(flag, remove_emoji(flag)))
print("emote: {!r} gone: {!r}".format(emote, remove_emoji(emote)))
收率:
flag: '' gone: ''
emote: '' gone: ''
您可以使用您想要定位的其他块进一步扩展此功能。我建议你单独查看它们,寻找32位表示法。请注意,您经常会看到它们写成U+1Fxyz
;对于Python,这些需要重新设置为\U0001Fxyz
。如果你想删除所有符号("所有表情符号"),你可以使用宽泛的字符集。但是如果你想要精确并只删除一组有限的符号,你需要小心。您定位的其中一个集合,例如Transport and Map Symbols,包含五个独立范围,并在完整的表情符号集上重叠。