2017-06-27 4 views
7

पर केवल वर्णमाला वर्ण (बहुभाषी) रखें, स्टैक ओवरफ्लो पर केवल स्ट्रिंग से वर्णमाला वर्णों को रखने के बारे में बहुत सारे उत्तर हैं, सबसे आम स्वीकार्य प्रसिद्ध रेगेक्स '[^a-zA-Z]' है। लेकिन यह जवाब पूरी तरह से गलत है क्योंकि ऐसा लगता है कि हर कोई केवल अंग्रेजी लिखता है ... मैंने सोचा कि मैं इन सभी उत्तरों को वोट दे सकता हूं लेकिन मुझे अंत में सोचा कि सवाल फिर से पूछने के लिए और अधिक रचनात्मक होगा, क्योंकि मुझे जवाब नहीं मिल रहा है।स्ट्रिंग

क्या अजगर में केवल वर्णमाला वर्ण रखने के लिए पाइथन में एक आसान (या नहीं ...) तरीका है जो सभी भाषाओं के लिए काम करता है? मैं एक पुस्तकालय है कि जावास्क्रिप्ट में xregexp ... की तरह कर सकता है सभी भाषाओं तक के बारे में शायद लगता है कि मैं अंग्रेज़ी लेकिन यह भी फ्रेंच, रूसी, चीनी मतलब है, greec ... आदि

+3

(एनाकोंडा अजगर 3.6 के साथ परीक्षण किया गया) मैं इसे @MoonCheesez मैं ठीक उसी तरह की सोच रहा था पूरे यूनिकोड में शामिल और गैर अक्षरात्मक अक्षर में –

+0

बाहर करने के लिए आसान हो सकता है लगता है। शेल स्क्रिप्टिंग में ऐसा करने का एक आसान तरीका है लेकिन मैं अभी पाइथोनिक तरीके से नहीं सोच सकता। –

उत्तर

7

[^ \ डब्ल्यू \ d_]

पायथन 3 या re.UNICODE पायथन 2 में ध्वज के साथ, आप [^\W\d_] का उपयोग कर सकते हैं।

\ डब्ल्यू: यूनिकोड सेट है, तो यह [0-9_] प्लस वर्ण यूनिकोड वर्ण गुण डेटाबेस में अक्षरांकीय नहीं के रूप में वर्गीकृत के अलावा और कुछ भरपाई कर देंगे।

तो [^\W\d_] ऐसा कुछ भी है जो अल्फान्यूमेरिक नहीं है या अंक नहीं है या अंडरस्कोर नहीं है। दूसरे शब्दों में, यह कोई वर्णमाला चरित्र है। :)

>>> import re 
>>> re.findall("[^\W\d_]", "jüste Ä tösté 1234 ßÜ א д", re.UNICODE) 
['j', 'ü', 's', 't', 'e', 'Ä', 't', 'ö', 's', 't', 'é', 'ß', 'Ü', 'א', 'д'] 

निकालें अंक पहले, फिर "\ डब्ल्यू"

के लिए देखो इस जटिल तर्क से बचने के लिए, आप भी अंक को दूर कर सकता है और पहली रेखांकित, और फिर अक्षरांकीय वर्णों के लिए देखो:

>>> without_digit = re.sub("[\d_]", "", "jüste Ä tösté 1234 ßÜ א д", re.UNICODE) 
>>> re.findall("\w", without_digit, re.UNICODE) 
['j', 'ü', 's', 't', 'e', 'Ä', 't', 'ö', 's', 't', 'é', 'ß', 'Ü', 'א', 'д'] 

regex मॉड्यूल

ऐसा लगता है कि regex मॉड्यूल में मदद कर सकता है, क्योंकि यह \p{L} यासमझता है 10।

यह रेगेक्स कार्यान्वयन मानक 'पुनः' मॉड्यूल के साथ पीछे-संगत है, लेकिन अतिरिक्त कार्यक्षमता प्रदान करता है।

>>> import regex as re 
>>> re.findall("\p{L}", "jüste Ä tösté 1234 ßÜ א д", re.UNICODE) 
['j', 'ü', 's', 't', 'e', 'Ä', 't', 'ö', 's', 't', 'é', 'ß', 'Ü', 'א', 'д'] 

+0

मैंने 'regex' मॉड्यूल और' \ p {एल} 'की कोशिश की, ऐसा लगता है कि यह केवल लेटेस अक्षरों को बिना उच्चारण के रखता है ... शायद मुझे कहीं कुछ याद आया लेकिन इसे दस्तावेज़ीकरण उदाहरण में से एक के बारे में काम करना चाहिए:' [\ पी {एल} - क्यूडब्ल्यू] # 'क्यू' और 'डब्ल्यू' – Laurent

+1

को छोड़कर सभी अक्षरों को सेट करें, ऐसा लगता है कि आपका पहला और दूसरा उदाहरण पूरी तरह से काम करता है :) – Laurent

+0

मैं संस्करण 2.7.9 का उपयोग करता हूं। संस्करण 3 के साथ प्रयास किया लेकिन मुझे पीआईपी के साथ स्थापित 'regex' आयात करने का प्रयास करने में कोई समस्या है और चूंकि मैं एक अजगर विशेषज्ञ नहीं हूं और' regex' आयात करने की कोशिश करने में काफी समय व्यतीत नहीं करना चाहता था, मैंने परीक्षण के लिए 2.7.9 का उपयोग किया था । – Laurent

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