Frage

Ich habe ein Skript Parsen der Dateinamen von TV-Episoden zeigen.name.s01e02.avi-Beispiel), packt die episode Namen (aus dem www.thetvdb.com API) automatisch und benennt Sie in etwas schöner (Name der Show - [01x02].avi)

Das Skript funktioniert gut, das ist, bis Sie versuchen, und verwenden Sie es auf Dateien, die Unicode-show-Namen (etwas, das ich nie wirklich darüber nachgedacht, da alle Dateien, die ich habe sind Englisch, also meistens ziemlich viel alle fallen in [a-zA-Z0-9'\-])

Wie kann ich den regulären Ausdrücken übereinstimmen, Zeichen mit Akzent und die likes?Derzeit ist die regex-config-Abschnitt sieht aus wie..

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'])),
]
War es hilfreich?

Lösung

Verwenden Sie ein Teilbereich der [\u0000-\uFFFF] für das, was Sie wollen.

Sie können auch die re.UNICODE compile-flag. Die docs sagen, dass, wenn UNICODE eingestellt ist, \w wird mit dem Zeichen [0-9_] plus was auch immer ist klassifiziert als alphanumerische Unicode-Zeichen-Eigenschaften-Datenbank.

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

Andere Tipps

Python-re-Modul nicht unterstützt, \p{Letter} oder \X.Jedoch, die neue regex-Implementierung auf PyPI tut.

Mastering Reguläre Ausdrücke von Jeffrey Friedl (großes Buch) wird erwähnt, dass die Sie verwenden könnten, \p{Letter} die passt unicode-Zeug, das als ein Brief.

\X scheint es als generisches Wort-Zeichen in einigen Sprachen, ermöglicht es Ihnen, mit einem einzelnen Charakter, Missachtung, wie viele bytes es nimmt.Könnte nützlich sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top