sub regular online example escape ejemplos python regex unicode character-properties

python - regular - Regex y Unicode



re.split python (4)

El módulo re de Python no es compatible con / p {Letter} o / X. Sin embargo, la nueva implementación de expresiones regulares en PyPI sí lo hace.

Tengo un script que analiza los nombres de archivo de episodios de TV (show.name.s01e02.avi, por ejemplo), toma el nombre del episodio (de la API www.thetvdb.com) y automáticamente los renombra en algo más agradable (Show Name - [01x02] ] .avi)

El script funciona bien, hasta que lo intentes y lo uses en archivos que tienen nombres de show de Unicode (algo en lo que nunca pensé realmente, dado que todos los archivos que tengo son en inglés, por lo que en su mayoría son bonitos, todos caen dentro de [a-zA-Z0-9''/-] )

¿Cómo puedo permitir que las expresiones regulares coincidan con los caracteres acentuados y los "me gusta"? Actualmente la sección de configuración de la expresión regular 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''])), ]


En Mastering Regular Expressions de Jeffrey Friedl (gran libro) se menciona que podría usar / p {Letter} que coincidirá con elementos unicode que se consideran una letra.



/ X parece estar disponible como un carácter de palabra genérico en algunos idiomas, le permite hacer coincidir un solo carácter sin tener en cuenta cuántos bytes ocupa. Podría ser útil.