2013-04-17 19 views
7

Fransızca cümleleri sözcüklere bölmek için bir belirteci kullanıyorum ve fransızca karakteri â içeren sözcüklerle ilgili sorunlarım vardı. Python son derece şaşırtıcı regex unicode davranışı

Sorunu izole etmek çalıştı ve sonunda bu basit gerçeği aşağı haşlanmış:

>>> re.match(r"’", u'â', re.U) 
>>> re.match(r"[’]", u'â', re.U) 
<_sre.SRE_Match object at 0x21d41d0> 

â bir topluluk Eşleştirici koymak oluyor eğer içeren bir desen ile uyar.

UTF-8 kullanımıyla ilgili bir sorunum var mı, yoksa bir hata mı?

Benim piton sürümü:

Python 2.7.3 (default, Jan 2 2013, 13:56:14) 
[GCC 4.7.2] on linux2 

DÜZENLEME:

Hum, embarassingly yeter, değiştirerek r bir u düzeltmeleri sorunu ile desen önek gibi görünüyor. resmi belgeler yoğun kullandığı neden

acaba r sonra :((

+0

'r' doğru ve önemlidir. ** yerine r 'yerine **' u '(cevaba bakınız) eklemelisiniz. –

+0

@ m.buettner: yup Cevabı görmeden önce düzenledim. Gittim ve ne yaptığını kontrol ettim ve her ikisi de önemli. Teşekkürler :) – m09

cevap

7

çok unicode dize olmalıdır Kişisel kalıbı:

>>> re.match(ur"’", u'â', re.U) 
>>> re.match(ur"[’]", u'â', re.U) 

Aksi görünüşte sre latin 1'e â kodlar ve sonuçlanan bayt bulur utf-8 olan üç bayt.

"[’]""[\xe2\x80\x99]" eşdeğerdir ve u'â'.encode('latin-1')\xe2 olup.

+0

ipucu için teşekkürler, sadece cevap vermeden önce fark ettim :) – m09

+0

're.U', sihirli bir şekilde unicode'u açmaz, sadece' 'w' anlamını değiştirir. –