Pregunta

Tengo un script que analiza los nombres de los episodios de TV (mostrar.nombre.s01e02.avi por ejemplo), agarra el episodio nombre (de la www.thetvdb.com API) y cambia automáticamente el nombre de ellos en algo más agradable (Mostrar Nombre - [01x02].avi)

El script funciona bien, es decir, hasta que tratar y utilizar los archivos que han Unicode show-nombres (algo que nunca he pensado realmente, ya que todos los archivos que tengo son en inglés, por lo que en su mayoría bastante-mucho todos caen dentro de [a-zA-Z0-9'\-])

¿Cómo puedo permitir que las expresiones regulares para que coincida con los caracteres acentuados y los gustos?Actualmente el regex de configuración de la sección parece..

config['valid_filename_chars'] = """0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@£$%^&*()_+=-[]{}"'.,<>`~? """
config['valid_filename_chars_regex'] = re.escape(config['valid_filename_chars'])

config['name_parse'] = [
    # foo_[s01]_[e01]
    re.compile('''^([%s]+?)[ \._\-]\[[Ss]([0-9]+?)\]_\[[Ee]([0-9]+?)\]?[^\\/]*$'''% (config['valid_filename_chars_regex'])),
    # foo.1x09*
    re.compile('''^([%s]+?)[ \._\-]\[?([0-9]+)x([0-9]+)[^\\/]*$''' % (config['valid_filename_chars_regex'])),
    # foo.s01.e01, foo.s01_e01
    re.compile('''^([%s]+?)[ \._\-][Ss]([0-9]+)[\.\- ]?[Ee]([0-9]+)[^\\/]*$''' % (config['valid_filename_chars_regex'])),
    # foo.103*
    re.compile('''^([%s]+)[ \._\-]([0-9]{1})([0-9]{2})[\._ -][^\\/]*$''' % (config['valid_filename_chars_regex'])),
    # foo.0103*
    re.compile('''^([%s]+)[ \._\-]([0-9]{2})([0-9]{2,3})[\._ -][^\\/]*$''' % (config['valid_filename_chars_regex'])),
]
¿Fue útil?

Solución

Utilice una sierra de [\u0000-\uFFFF] para lo que quieres.

También puede utilizar el re.UNICODE compilación de la bandera. El docs dicen que si UNICODE se establece, \w coincidirá con los personajes [0-9_] además de lo que se clasifica como alfanuméricos en las propiedades de caracteres Unicode de la base de datos.

Ver también http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-05/2560.html.

Otros consejos

Python re módulo no support \p{Letra} o \X.Sin embargo, la new regex aplicación en PyPI no.

En el dominio de las Expresiones Regulares de Jeffrey Friedl (gran libro) se menciona que podría utilizar \p{Letra} que coincidirá con unicode cosas que se considera una carta.

\X parece estar disponible como una palabra genérica de caracteres en algunos idiomas, permite a coincidir con un único personaje sin tener en cuenta cuántos bytes ocupa.Podría ser útil.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top