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.
Use un subrango de [/ u0000- / uFFFF] para lo que desee.
También puede usar el indicador de compilación re.UNICODE. Los documentos dicen que si se establece UNICODE, / w coincidirá con los caracteres [0-9_] más lo que se clasifique como alfanumérico en la base de datos de propiedades de caracteres Unicode.
Ver también http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-05/2560.html .
/ 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.