2013-09-06 7 views
8

मैं वर्तमान में re.findall का उपयोग खोजने के लिए और '#' एक स्ट्रिंग में हैश टैग के लिए चरित्र के बाद शब्द को अलग करने की:पायथन में रेगेक्स के लिए उच्चारण वर्णों के लिए कैसे खाता है?

hashtags = re.findall(r'#([A-Za-z0-9_]+)', str1) 

यह str1 खोज करता है और सभी हैशटैग पाता है। यह काम करता है हालांकि यह इस तरह के उच्चारण वर्णों के लिए जिम्मेदार नहीं है उदाहरण के लिए: áéíóúñü¿

यदि इनमें से कोई भी अक्षर str1 में है, तो यह हैशटैग को इससे पहले पत्र तक सहेज देगा। तो उदाहरण के लिए, #yogenfrüz#yogenfr होगा।

मैं सभी उच्चारण चिह्न वाले अक्षरों कि, जर्मन डच, फ्रेंच और स्पेनिश से लेकर के लिए खाते की ताकि मैं #yogenfrüz

हैशटैग बचा सकता है मैं कैसे कर इस

+2

उपयोग 're.UNICODE' झंडा। –

+0

@ अश्विनी चौधरी: यूनिकोड ध्वज श्रेणी गैर-ASCII वर्णों का उपयोग नहीं करेगा, नहीं। यदि आप 'ए-जे' से मेल खाने के लिए रेगेक्स को बताते हैं, तो यह शाब्दिक सीमा लेता है, न कि मानवीय व्याख्या कि 'ए' और 'á' किसी भी तरह एक ही बात है। –

+0

@MartijnPieters: तो, यह क्या करेगा? ;-) – JohnTortugo

उत्तर

21

प्रयास करें के बारे में जा सकते हैं सक्षम होना चाहिए निम्नलिखित:

hashtags = re.findall(r'#(\w+)', str1, re.UNICODE) 

Regex101 Demo

संपादित मार्टिजन पीटर से नीचे उपयोगी टिप्पणी देखें।

+4

छोटी चेतावनी: '\ w' संयुक्त कोडपॉइंट्स से मेल नहीं खाएगा, इसलिए 'ए' और [यू + 0301 कॉम्बिनेशन एक्यूट एक्सेसेंट] (https://codepoints.net/U+0301) मिलान नहीं किया जाएगा, भले ही वह * प्रिंट * के रूप में 'á'। आप पहले एनएफसी को सामान्य बनाना चाहते हैं। –

+0

@MartijnPieters साझा करने के लिए धन्यवाद, हमेशा सीखने के लिए कुछ अतिरिक्त। –

+0

@ इब्राहिम नज्जर क्या आप मार्टिजन पीटर्स द्वारा आपके समाधान में उल्लिखित फिक्स को कार्यान्वित कर सकते हैं? धन्यवाद। –

2

तुम भी उपयोग करने के लिए

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

मैं कैसे अपने-अपने पात्रों में उन सभी से बच वर्ण परिवर्तित अगर कोई यूनिकोड à की तरह चाहते हो सकता है, मैं कैसे कन्वर्ट करते हैं कि एक मानक में एक? मान लें आप एक चर my_unicode कहा जाता है में अपने यूनिकोड भरी हुई है ... एक एक इस सरल ...

आयात unicodedata उत्पादन = unicodedata.normalize ('NFD', my_unicode) .encode ('ascii' है में सामान्य 'उपेक्षा') स्पष्ट उदाहरण ...

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

जांच इस जवाब यह मुझे बहुत मदद की: How to convert unicode accented characters to pure ascii without accents?

+0

महान उत्तर बेर्क! किसी को निश्चित रूप से यह उपयोगी लगेगा! – noahandthewhale

संबंधित मुद्दे