मैं पाइथन 2.7.3 में re
मॉड्यूल का उपयोग करने का प्रयास कर रहा हूं जिसमें यूनिकोड एन्कोडेड देवनागरी पाठ है। मैंने अपने कोड के शीर्ष पर from __future__ import unicode_literals
जोड़ा है, इसलिए सभी स्ट्रिंग्स अक्षर यूनिकोड ऑब्जेक्ट्स होना चाहिए।पायथन यूनिकोड नियमित अभिव्यक्ति मिलान कुछ यूनिकोड वर्णों के साथ विफल रहा है -बग या गलती?
हालांकि, मैं पाइथन के रेगेक्स मिलान के साथ कुछ विषम समस्याओं में भाग रहा हूं। उदाहरण के लिए, इस नाम पर विचार करें: "किशोरी"। यह हिंदी में एक (गलत वर्तनी) नाम है, जो मेरे उपयोगकर्ताओं में से एक द्वारा दर्ज किया गया है। कोई हिंदी पाठक इसे एक शब्द के रूप में पहचान लेगा।
निम्नलिखित एकदम सही ढंग से, एक मैच रिटर्न:
re.search("^[\w\s][\w\s]*","किशोरी",re.UNICODE)
लेकिन यह नहीं करता है:
re.search("^[\w\s][\w\s]*$","किशोरी",re.UNICODE)
कुछ spelunking पता चला है कि इस स्ट्रिंग में केवल एक ही चरित्र, चरित्र 0915 (क), \ w चरित्र वर्ग के भीतर गिरने के रूप में पहचाना जाता है। यह गलत है, क्योंकि यूनिकोड कैरेक्टर डाटाबेस file on "derived core properties" इस स्ट्रिंग में वर्णमाला के रूप में अन्य वर्णों (मैंने सभी की जांच नहीं की है) सूचीबद्ध की है - वास्तव में वे हैं।
क्या यह पाइथन के कार्यान्वयन में बस एक बग है? मैं चरित्र के रूप में सभी देवनागरी अल्फान्यूमेरिक वर्णों को मैन्युअल रूप से परिभाषित करके इसे प्राप्त कर सकता हूं, लेकिन यह दर्दनाक होगा। या मुझ से कुछ गलत हो रहा है?
हां, पुष्टि कर सकते हैं कि regex मॉड्यूल काम करता है। [[: Alnum:]] POSIX चरित्र वर्ग भी regex मॉड्यूल के साथ काम करता है। – ShankarG
@ शंकर जी: 'perl' सहमत हैं: 'echo किशोरी | perl -CS -ne'print अगर/^ \ w + $/''(utf-8 io मानें)। – jfs
इस उत्तर में मेरा "स्वीकृत" चिह्न बदल गया, क्योंकि यह वास्तव में सही उत्तर है - यह वास्तव में पुनः मॉड्यूल में एक बग है। – ShankarG