2008-12-26 14 views
68

साथ नियमित अभिव्यक्ति मैं स्ट्रिंग से कुछ यूनिकोड प्रतीकों को हटाने की आवश्यकता 'بسم الله الرحمن الرحيم'अजगर और यूनिकोड

मैं जानता हूँ कि वे यहाँ यकीन है कि के लिए मौजूद हैं। मैंने कोशिश की:

re.sub('([\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+)', '', 'بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ') 

लेकिन यह काम नहीं करता है। स्ट्रिंग वही रहता है। मैं क्या गलत कर रहा हूं?

उत्तर

87

क्या आप अजगर 2.x या 3.0 का उपयोग कर रहे हैं?

यदि आप 2.x का उपयोग कर रहे हैं, तो 'यू' के साथ रेगेक्स स्ट्रिंग को एक यूनिकोड-एस्केप स्ट्रिंग बनाने का प्रयास करें। चूंकि यह regex है 'r' के साथ, अपने regex स्ट्रिंग को कच्ची स्ट्रिंग बनाने के लिए यह अच्छा अभ्यास है। इसके अलावा, अपने पूरे पैटर्न कोष्ठक में डालना अनिवार्य है।

re.sub(ur'[\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+', '', ...) 

http://docs.python.org/tutorial/introduction.html#unicode-strings

संपादित करें:

यह भी re.UNICODE/re.U/यूनिकोड regexes के लिए ध्वज का उपयोग करना एक अच्छी आदत है, लेकिन यह केवल की तरह चरित्र वर्ग उपनाम को प्रभावित करता है (यू?) \ w या \ b, जिसमें से यह पैटर्न किसी भी का उपयोग नहीं करता है और इसलिए इससे प्रभावित नहीं होगा।

+9

हम्म कहा जाता है, द्वारा लेख पढ़ें पता नहीं था तुम दोनों '' u'' और '' r'' उपसर्गों को श्रेणीबद्ध सकता है। यह बहुत मजेदार है! –

58

unicode तारों का उपयोग करें। re.UNICODE ध्वज का प्रयोग करें।

>>> myre = re.compile(ur'[\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+', 
         re.UNICODE) 
>>> myre 
<_sre.SRE_Pattern object at 0xb20b378> 
>>> mystr = u'بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ' 
>>> result = myre.sub('', mystr) 
>>> len(mystr), len(result) 
(38, 22) 
>>> print result 
بسم الله الرحمن الرحيم 

योएल SpolskyThe Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

+8

आलेख अद्भुत है – Fluffy

+0

@ नोस्क्लो, क्यों घुंघराले ब्रेसिज़ जो वर्णों की संख्या सेट करते हैं - {5} - यूनिकोड वर्णों के साथ काम नहीं कर रहे हैं, मुझे इसके साथ समस्याएं आ रही हैं, फिर भी, + ठीक काम करता है..do आपको कोई विचार है? धन्यवाद! – securecurve

+0

@securecurve मुझे कोई जानकारी नहीं है, और मेरे जादू क्रिस्टल बॉल के बिना मदद करने का कोई तरीका नहीं है। मैंने अभी इसका परीक्षण किया, और यह मेरे लिए ठीक काम करता है। यदि यह आपके लिए काम नहीं करता है, तो मेरा सुझाव है कि आप एक नया प्रश्न पूछें, ** अपना कोड ** प्रदान करें और परिणाम जो आपको मिल रहा है। – nosklo

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