supported str not has bytes attribute python regex unicode

python - str - ¿Cómo especifico un rango de caracteres Unicode?



python unicode utf-8 (2)

¿Cómo puedo especificar un rango de caracteres Unicode desde '' '' (espacio) a /u00D7FF ?

Tengo una expresión regular como r''[/u0020-/u00D7FF]'' y no compilará diciendo que es un rango malo. Soy nuevo en las expresiones regulares de Unicode, por lo que no he tenido este problema antes.

¿Hay alguna forma de hacer esta compilación o una expresión regular que esté olvidando o que no haya aprendido todavía?


La sintaxis de su rango Unicode no hará lo que usted espera.

  1. La cadena r'''' bruto evita que /u escape se analice, y el motor de expresiones regulares no hará esto. El único rango en este conjunto es [0-/] :

    >>> re.compile(r''[/u0020-/u00d7ff]'', re.DEBUG) in literal 117 literal 48 literal 48 literal 50 range (48, 117) literal 48 literal 48 literal 100 literal 55 literal 102 literal 102

  2. Al convertirlo en un literal de Unicode, se genera un análisis de /u mientras se dejan atrás otras barras invertidas (aunque eso no es una preocupación aquí), pero los ceros iniciales lo están arruinando. La sintaxis es /uxxxx o /Uxxxxxxxx , por lo que se analiza como " /u00d7 , f , f ".

    >>> re.compile(ur''[/u0020-/u00d7ff]'', re.DEBUG) in range (32, 215) literal 102 literal 102

  3. Eliminar los ceros /U0000d7ff o cambiar a /U0000d7ff lo solucionará:

    >>> re.compile(ur''[/u0020-/ud7ff]'', re.DEBUG) in range (32, 55295)


Si está utilizando Python 2.x, debe asegurarse de que está especificando una cadena Unicode (con u '''', o el "Unicode" incorporado):

>>> r = re.compile(u''[/u0020-/uD7FF]'') >>> r.search(u''foo /uD7F0 bar'') <_sre.SRE_Match object at 0xb7084950> r.search(u'' '') <_sre.SRE_Match object at 0xb7084b48>

El uso de cadenas sin formato (como usted es, con r '''') le da la cadena (ascii) compuesta por "trazo de retroceso" + la letra "u" más el número 0 más ...