अजगर और यूनिकोड के साथ नियमित अभिव्यक्ति


83

मुझे स्ट्रिंग से कुछ यूनिकोड प्रतीकों को हटाने की आवश्यकता है 'بْسِمل اللَ deleteهِ الرَٰحٰمَّنِ الرَّحِيم Un'

मुझे पता है कि वे यहां मौजूद हैं। मैंने कोशिश की:

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

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

जवाबों:


110

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

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

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

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

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

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


15
हम्म, पता नहीं था कि आप दोनों uऔर rउपसर्गों को समाप्‍त कर सकते हैं । यह बहुत मजेदार है!
बाल्टाजार रौबरोल

6
@BalthazarRouberol मुझे SyntaxError: invalid syntax पायथन 3.6 में मिलता है
अयूब

75

यूनिकोड स्ट्रिंग्स का उपयोग करें । 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
بسم الله الرحمن الرحيم

जोएल स्पोलस्की द्वारा लिखे गए लेख को द एब्सोल्यूट मिनिमम हर सॉफ्टवेयर डेवलपर बिल्कुल कहा जाता है , यूनिकोड और कैरेक्टर सेट्स के बारे में सकारात्मक रूप से जानना चाहिए (कोई बहाना नहीं!)


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

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

4
यदि आप reअजगर में उपयोग करना चाहते हैं , तो आपको यह जानना होगा कि यह यूनिकोड वर्ण संपत्ति (जैसे \p{L}) का समर्थन नहीं करता है । pypi.python.org/pypi/regex करता है।
शोर

re.UNICODEझंडा यह केवल आशुलिपि चरित्र वर्गों को प्रभावित करता है के बाद से, यहाँ बेकार है \w, \d, \s
.तहठ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.