Regex og unicode

stemmer
22

Jeg har et script som analyserer filnavnene av TV-episoder (show.name.s01e02.avi for eksempel), griper episode navn (fra www.thetvdb.com API) og automatisk endrer navn dem til noe bedre (Vis navn - [01x02 ] avi)

Skriptet fungerer fint, det er før du prøver og bruke det på filer med Unicode show-navn (noe jeg egentlig aldri tenkt på, ettersom alle filene jeg har er engelsk, så det meste ganske-mye alt faller innenfor [a-zA-Z0-9'\-])

Hvordan kan jeg tillate regulære uttrykk for å matche tegn med aksent og det liker? Foreløpig regex sin config delen ser ut som ..

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'])),
]
Publisert på 18/08/2008 klokken 09:41
kilden bruker
På andre språk...                            


4 svar

stemmer
16

Bruk en subrange av [\ u0000- \ uFFFF] for det du ønsker.

Du kan også bruke re.UNICODE kompilere flagget. Docs si at hvis UNICODE er satt, vil \ w samsvare med tegnene [0-9_] pluss det som er klassifisert som alfanumerisk i Unicode tegnegenskapene database.

Se også http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-05/2560.html .

Svarte 18/08/2008 kl. 09:43
kilden bruker

stemmer
5

Pythons re-modulen tillater ikke \ p {Letter} eller \ X. Men den nye regex implementering på PyPI gjør.

Svarte 01/04/2011 kl. 23:19
kilden bruker

stemmer
4

I Maste Regular Expressions fra Jeffrey Friedl (stor bok) er det nevnt at du kan bruke \ p {Letter} som vil matche unicode ting som er ansett som et brev.

Svarte 18/08/2008 kl. 10:17
kilden bruker

stemmer
0

\ X ser ut til å være tilgjengelig som et generisk ord tegn på enkelte språk, lar den deg til å matche et enkelt tegn disregarding hvor mange byte den tar opp. Kan være nyttig.

Svarte 18/08/2008 kl. 09:53
kilden bruker

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