2013-09-06 11 views
8

Şu anda bulup bir dizede karma etiketleri için '#' karakterinden sonra kelimeleri izole etmek re.findall kullanın. Ancak bu, örneğin aşağıdaki gibi aksanlı karakterler için geçerli değildir: áéíóúñü¿.Python'da regex için aksanlı karakterler nasıl hesaplanır?</p> <pre><code>hashtags = re.findall(r'#([A-Za-z0-9_]+)', str1) </code></pre> <p>Bu str1 arar ve tüm Hashtag'leri bulur:

Bu harflerden biri str1'deyse, hashtag'i önceki harfe kadar kaydeder. Örneğin, #yogenfrüz, #yogenfr olacaktır.

ben bu

+2

Kullanım 're.UNICODE' bayrağı: Bu cevabım bana çok yardımcı

myfoo = u'àà' myfoo u'\xe0\xe0' unicodedata.normalize('NFD', myfoo).encode('ascii', 'ignore') 'aa' 

çek ... Açık örnek) 'görmezden'. –

+0

@AshwiniChaudhary: UNICODE bayrağı, kullanılan menzili ASCII olmayan karakterlerle eşleştirmez, no. Normal ifadeyi "a-z" ile eşleştiğini söylerseniz, "a" ve "bir şekilde" aynı şey olan insan yorumunu değil, tam anlamıyla alan aralığını alır. –

+0

@MartijnPieters: Peki, ne yapacak? ;-) – JohnTortugo

cevap

21

deneyin yapmayı nasıl gidebilirim #yogenfrüz

gibi hashtag kaydedebilir, böylece Alman Hollandaca, Fransızca ve İspanyolca arasında değişir tüm aksanlı harfler hesabını gerekiyor aşağıdaki:

Regex101 Demo

DÜZENLEME

hashtags = re.findall(r'#(\w+)', str1, re.UNICODE) 
Aşağıdaki faydalı yorumu Martijn Pieters'den kontrol edin.

+4

Küçük uyarı: "\" birleşik kod noktaları eşleşmeyecek, yani "a" ve [U + 0301 ACENTE ACCENTE ACCENT] (https://codepoints.net/U+0301) eşleşmeyecek. * yazdırır * gibi. İlk önce NFC'ye normalize etmek isteyebilirsiniz. –

+0

@MartijnPieters Paylaştığınız için teşekkürler, her zaman öğrenilecek ekstra bir şey. –

+0

@IbrahimNajjar Martijn Pieters tarafından belirtilen düzeltmeyi sizin çözümünüzde uygulayabilir misiniz? Teşekkürler. –

2
Ayrıca

import unicodedata 
output = unicodedata.normalize('NFD', my_unicode).encode('ascii', 'ignore') 

nasıl ben bir unicode à varsa gibi kendi karakterleri içine tüm bu çıkış karakterleri dönüştürebilirim kullanmak isteyebilirsiniz

, nasıl dönüştürebilirim standart bir o? Bir bu basit ...

ithalat unicodedata çıkış = unicodedata.normalize ('nfd', my_unicode) .encode ('ascii' olduğu bir normale ... my_unicode denilen bir değişken haline unicode yüklediğiniz varsayalım How to convert unicode accented characters to pure ascii without accents?

+0

harika cevap berk! Birisi kesinlikle bu yararlı bulacaktır! – noahandthewhale

İlgili konular