Normal İfadeler ve unicode

oy
22

Ben, TV bölümleri (örneğin show.name.s01e02.avi) dosya adlarını ayrıştırır (www.thetvdb.com API) bölüm adını alır ve otomatik olarak daha güzel bir şey (gösterin Adı içine yeniden adlandırır bir komut dosyası var - [01x02 ] avi)

Script (içinde öylesine çoğunlukla oldukça-hemen tüm sonbahar, ben İngilizce olan tüm dosyaların beri, gerçekten hiç düşünmedim şey denemek ve Unicode show-isimler var dosyalarda kullanana kadar yani gayet iyi çalışıyor [a-zA-Z0-9'\-])

Nasıl düzenli ifadeler aksanlı karakterler ve hoşlandığı maç için izin verebilir? Şu Regex en yapılandırma bölümü benziyor ..

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'])),
]
Oluştur 18/08/2008 saat 08:41
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
16

Ne istediğinizi için [uFFFF \ \ u0000-] bir subrange kullanın.

Ayrıca re.UNICODE derleme bayrağını kullanabilirsiniz. Docs UNICODE ayarlanırsa, \ w karakterleri [0-9_] artı ne olursa olsun Unicode karakter özellikleri veritabanında alfanümerik olarak sınıflandırılır maç olacak söylüyorlar.

Ayrıca bkz http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-05/2560.html .

Cevap 18/08/2008 saat 08:43
kaynak kullanıcı

oy
0

\ X bazı dillerde genel bir kelime karakter, size o kadar sürer kaç bayt bir tek karakter hiçe maç için izin verdiği kullanılabilir görünmektedir. yararlı olabilir.

Cevap 18/08/2008 saat 08:53
kaynak kullanıcı

oy
4

Jeffrey Friedl (büyük defter) dan Normal İfadeleri Mastering yılında bir mektup olarak kabul edilir unicode şeyler maç olacak \ p {Letter} kullanabilirsiniz bahsedilmektedir.

Cevap 18/08/2008 saat 09:17
kaynak kullanıcı

oy
5

Python'un yeniden modülü \ p {Letter} veya \ X desteklemez. Ancak, PyPI yeni regex uygulaması yapar.

Cevap 01/04/2011 saat 22:19
kaynak kullanıcı

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