Domanda

Ho uno script che analizza i file di episodi di serie TV (vedi.nome.s01e02.avi per esempio), afferra l'episodio nome (dal www.thetvdb.com API) e rinomina automaticamente in qualcosa di più bello (Vedi Nome - [01x02].avi)

Lo script funziona bene, che è fino a quando si tenta di utilizzare su file Unicode show-nomi (cosa che non ho mai davvero pensato, dal momento che tutti i file che ho sono in inglese, quindi per la maggior parte abbastanza-molto rientrano nell'ambito [a-zA-Z0-9'\-])

Come è possibile consentire le espressioni regolari per abbinare i caratteri accentati e simili?Attualmente la regex config sezione sembra..

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'])),
]
È stato utile?

Soluzione

Utilizzare solo una porzione di [\u0000-\uFFFF] per ciò che si desidera.

È inoltre possibile utilizzare il re.UNICODE compilare bandiera. La documentazione dire che se UNICODE è impostato, \w corrispondono i caratteri [0-9_] più tutto ciò che è classificato come alfanumerici nella proprietà dei caratteri Unicode database.

Vedi anche http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-05/2560.html.

Altri suggerimenti

Python modulo re non supporta \p{Letter} o \X.Tuttavia, l' new regex implementazione su PyPI fa.

Nella Padronanza di Espressioni Regolari da Jeffrey Friedl (libro) non è detto che si potrebbe usare \p{Letter} che corrisponde a unicode roba che è considerata una lettera.

\X sembra essere disponibile come un termine generico caratteri in alcune lingue, permette di abbinare un singolo carattere trascurando di quanti byte occupa.Potrebbe essere utile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top