eliminar unicode emoji usando re en python
regex tweets (1)
No está utilizando la notación correcta para puntos unicode que no son BMP;
desea usar
/U0001FFFF
, una
U
mayúscula
y 8 dígitos:
myre = re.compile(u''[''
u''/U0001F300-/U0001F5FF''
u''/U0001F600-/U0001F64F''
u''/U0001F680-/U0001F6FF''
u''/u2600-/u26FF/u2700-/u27BF]+'',
re.UNICODE)
Esto se puede reducir a:
myre = re.compile(u''[''
u''/U0001F300-/U0001F64F''
u''/U0001F680-/U0001F6FF''
u''/u2600-/u26FF/u2700-/u27BF]+'',
re.UNICODE)
ya que tus dos primeros rangos son adyacentes.
Su versión estaba especificando (con espacios adicionales para facilitar la lectura):
[/u1F30 0-/u1F5F F/u1F60 0-/u1F64 F/u1F68 0-/u1F6F F /u2600-/u26FF/u2700-/u27BF]+
Esto se debe a que la secuencia de escape
/uxxxx
siempre toma solo 4 dígitos hexadecimales, no 5.
El mayor de esos rangos es
0-/u1F6F
(desde el dígito
0
hasta
Ὧ
), que cubre una
franja muy grande
del estándar Unicode.
La expresión corregida funciona, siempre que use un ejecutable Python ancho UCS-4:
>>> import re
>>> myre = re.compile(u''[''
... u''/U0001F300-/U0001F64F''
... u''/U0001F680-/U0001F6FF''
... u''/u2600-/u26FF/u2700-/u27BF]+'',
... re.UNICODE)
>>> myre.sub('''', u''Some example text with a sleepy face: /U0001f62a'')
u''Some example text with a sleepy face: ''
El equivalente de UCS-2 es:
myre = re.compile(u''(''
u''/ud83c[/udf00-/udfff]|''
u''/ud83d[/udc00-/ude4f/ude80-/udeff]|''
u''[/u2600-/u26FF/u2700-/u27BF])+'',
re.UNICODE)
Puede combinar los dos en su secuencia de comandos con un controlador de excepciones:
try:
# Wide UCS-4 build
myre = re.compile(u''[''
u''/U0001F300-/U0001F64F''
u''/U0001F680-/U0001F6FF''
u''/u2600-/u26FF/u2700-/u27BF]+'',
re.UNICODE)
except re.error:
# Narrow UCS-2 build
myre = re.compile(u''(''
u''/ud83c[/udf00-/udfff]|''
u''/ud83d[/udc00-/ude4f/ude80-/udeff]|''
u''[/u2600-/u26FF/u2700-/u27BF])+'',
re.UNICODE)
Traté de eliminar el emoji de un texto de tweet Unicode e imprimir el resultado en Python 2.7 usando
myre = re.compile(u''[/u1F300-/u1F5FF/u1F600-/u1F64F/u1F680-/u1F6FF/u2600-/u26FF/u2700-/u27BF]+'',re.UNICODE)
print myre.sub('''', text)
pero parece que casi todos los caracteres se eliminan del texto. He revisado varias respuestas de otras publicaciones, desafortunadamente, ninguna de ellas funciona aquí. ¿Hice algo mal en re.compile ()?
Aquí hay un ejemplo de salida en el que se eliminaron todos los caracteres:
“ '' //./” ! # # # …