2010-10-01 16 views
18

मैं ' ' (स्पेस) से \u00D7FF से यूनिकोड वर्णों की एक श्रृंखला कैसे निर्दिष्ट करूं?मैं यूनिकोड वर्णों की एक श्रृंखला कैसे निर्दिष्ट करूं

मेरे पास r'[\u0020-\u00D7FF]' जैसी नियमित अभिव्यक्ति है और यह संकलित नहीं होगी कि यह एक खराब सीमा है। मैं यूनिकोड नियमित अभिव्यक्तियों के लिए नया हूं इसलिए मुझे पहले यह समस्या नहीं मिली है।

क्या इस संकलन या नियमित अभिव्यक्ति को बनाने का कोई तरीका है जिसे मैं भूल रहा हूं या अभी तक नहीं सीखा है?

+0

यह यहाँ ठीक संकलित (2.6.5) – NullUserException

+0

आप सही हैं - कि संकलित करता है - मैं था माना जाता है कि उस नियमित अभिव्यक्ति का वह हिस्सा था जिस पर मैं काम कर रहा था जिसमें समस्याएं थीं। मैं उस हिस्से को पोस्ट करूंगा जो मुझे समस्याएं पैदा कर रहा है। – spig

उत्तर

24

आपकी यूनिकोड रेंज का सिंटैक्स नहीं करेगा आप क्या उम्मीद करते हो।

  1. कच्चे r'' स्ट्रिंग पार्स किया जाता से \u पलायन रोकता है, और regex इंजन ऐसा नहीं होगा। इस सेट में केवल सीमा [0-\] है:

    >>> re.compile(r'[\u0020-\u00d7ff]', re.DEBUG) 
    in 
        literal 117 
        literal 48 
        literal 48 
        literal 50 
        range (48, 117) 
        literal 48 
        literal 48 
        literal 100 
        literal 55 
        literal 102 
        literal 102 
    
  2. यह एक यूनिकोड शाब्दिक causes \u parsing while leaving other backslashes alone बनाना (हालांकि कि एक चिंता का विषय नहीं है यहाँ), लेकिन प्रमुख शून्यों यह खिलवाड़ अप कर रहे हैं। वाक्यविन्यास \uxxxx या \Uxxxxxxxx है, इसलिए इसे "\u00d7, f, f" के रूप में विश्लेषित किया गया है।

    >>> re.compile(ur'[\u0020-\u00d7ff]', re.DEBUG) 
    in 
        range (32, 215) 
        literal 102 
        literal 102 
    
  3. अग्रणी शून्य निकाला जा रहा है या \U0000d7ff का उपयोग करने जा इसे ठीक कर देगा:

    >>> re.compile(ur'[\u0020-\ud7ff]', re.DEBUG) 
    in 
        range (32, 55295) 
    
+1

का उपयोग करेंगे बहुत धन्यवाद - मुझे सभी यूनिकोड सामानों के बारे में कोई जानकारी नहीं थी। तो, इसे ऊपरी मामले 'यू' के साथ निचले मामले 'यू' और 8 के साथ 4 अंक होना चाहिए, है ना? – spig

+0

यह सही है। –

+0

नोट यह उत्तर पायथन 2 के संदर्भ में किया गया है। पायथन 3 में, 'आर "उदाहरण" 'और' ur "उदाहरण" 'के बीच कोई अंतर नहीं है। – Flimm

5

आप पायथन 2.x का उपयोग कर रहे हैं, तो आप यकीन है कि आप एक यूनिकोड स्ट्रिंग (यू के साथ ', या "यूनिकोड" में निर्मित) निर्दिष्ट कर रहे हैं चाहिए:

>>> r = re.compile(u'[\u0020-\uD7FF]') 
>>> r.search(u'foo \uD7F0 bar') 
<_sre.SRE_Match object at 0xb7084950> 
r.search(u' ') 
<_sre.SRE_Match object at 0xb7084b48> 

कच्चे का उपयोग करना स्ट्रिंग्स (जैसा कि आप हैं, आर 'के साथ) आपको "बैकस्ट्रोक" + पत्र "यू" प्लस संख्या 0 प्लस द्वारा लिखित (एएससीआई) स्ट्रिंग देता है ...

+0

क्या आपको '0' वर्णों की आवश्यकता है जब आप 4 लंबे समय तक पर्याप्त नहीं हैं? एक जगह की तरह, आपके पास केवल \ u20 होगा लेकिन आपको \ u0020 लिखना होगा, है ना? – spig

+0

मुझे लगता है कि आप पहले ही उत्तर दे चुके हैं, लेकिन हाँ, यह सही है :) – rbp

+1

** पूर्ण यूनिकोड ** के बारे में क्या? उदाहरण के लिए, गोथिक ब्लॉक यू +1034 ए गोथिक लिटर एनएएनडीआरडी के माध्यम से यू + 10330 गोथिक लिटर एएचएसए से चलता है लेकिन इसमें अगले पांच कोड बिंदु भी शामिल हैं, वर्तमान में अनामित? आप पाइथन एक्सप्रेस में कैसे करते हैं कि अन्य प्रोग्रामिंग भाषाएं आपको '\ p {गोथिक}', '\ p {स्क्रिप्ट = गॉथिक} ',' \ p {InGothic}', या '\ p {block = Gothic} 'का उपयोग करने की अनुमति देती हैं। के लिये? उदाहरण के लिए, पर्ल में, '/ \ pN/&&/\ p {InGothic} /' यू + 10341 गोथिक लिटर निनेट और यू + 1034 ए गोथिक लिटर नैन हंड्रेड उत्पन्न करता है। यह पाइथन में काम नहीं करता है, यद्यपि; क्यों नहीं? – tchrist

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

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