Regex και unicode

ψήφοι
22

Έχω ένα σενάριο που αναλύει τα ονόματα των επεισοδίων TV (show.name.s01e02.avi για παράδειγμα), αρπάζει το όνομα επεισόδιο (από το www.thetvdb.com API) και αυτόματα τα μετονομάζει σε κάτι καλύτερο (Εμφάνιση Όνομα - [01x02 ] .avi)

Το σενάριο δουλεύει μια χαρά, δηλαδή μέχρι την προσπάθειά σας και να το χρησιμοποιήσετε σε αρχεία που έχουν Unicode show-ονόματα (κάτι που στην πραγματικότητα ποτέ δεν σκέφτηκα, δεδομένου ότι όλα τα αρχεία που έχω είναι η αγγλική, τόσο ως επί το πλείστον λίγο-πολύ όλα εμπίπτουν [a-zA-Z0-9'\-])

Πώς μπορώ να επιτρέψουν οι κανονικές εκφράσεις για να ταιριάζει με τονισμένους χαρακτήρες και τους ομοίους; Επί του παρόντος, το τμήμα ρυθμίσεων του regex μοιάζει ..

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'])),
]
Δημοσιεύθηκε 18/08/2008 στις 08:41
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
16

Χρησιμοποιήστε ένα υποσειράς της [\ u0000- \ uFFFF] για ό, τι θέλετε.

Μπορείτε επίσης να χρησιμοποιήσετε τη σημαία re.UNICODE μεταγλώττισης. Οι γιατροί λένε ότι αν UNICODE έχει οριστεί, \ w θα συμφωνούν με τους χαρακτήρες [0-9_] καθώς και ό, τι έχει ταξινομηθεί ως αλφαριθμητικό στο Unicode δεδομένων ιδιότητες χαρακτήρα.

Δείτε επίσης http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-05/2560.html .

Απαντήθηκε 18/08/2008 στις 08:43
πηγή χρήστη

ψήφοι
0

\ X φαίνεται να είναι διαθέσιμο ως μια γενική λέξη-χαρακτήρα σε ορισμένες γλώσσες, σας επιτρέπει να ταιριάξει με ένα μόνο χαρακτήρα Μη τήρηση των πόσα bytes που καταλαμβάνει. Μπορεί να είναι χρήσιμο.

Απαντήθηκε 18/08/2008 στις 08:53
πηγή χρήστη

ψήφοι
4

Σε Mastering Κανονικές Εκφράσεις από Jeffrey Friedl (μεγάλο βιβλίο) αναφέρεται ότι θα μπορούσατε να χρησιμοποιήσετε \ p {Επιστολή} που θα ταιριάζει με unicode ουσία που θεωρείται ένα γράμμα.

Απαντήθηκε 18/08/2008 στις 09:17
πηγή χρήστη

ψήφοι
5

Δομοστοιχείο re Python δεν υποστηρίζει \ p {Letter} ή \ Χ. Ωστόσο, η νέα εφαρμογή regex για PyPI κάνει.

Απαντήθηκε 01/04/2011 στις 22:19
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more