2010-11-05 11 views
17

मैं सभी गैर-अल्फान्यूमेरिक वर्णों को स्ट्रिंग (पायथन) से हाइफ़न से बाहर करना चाहता हूं। हाइफ़न को छोड़कर किसी भी गैर-अल्फान्यूमेरिक चार से मेल खाने के लिए मैं इस नियमित अभिव्यक्ति को कैसे बदल सकता हूं?रेगेक्स समूह से किसी चरित्र को कैसे बाहर निकालना है?

re.compile('[\W_]') 

धन्यवाद।

उत्तर

24

तुम सिर्फ एक नकार चरित्र वर्ग के बजाय इस्तेमाल कर सकते हैं:

re.compile(r"[^a-zA-Z0-9-]") 

यह कुछ भी है कि अक्षरांकीय वर्गों या हाइफन में नहीं है से मेल खाएगी। यह आपके वर्तमान रेगेक्स के अनुसार अंडरस्कोर से भी मेल खाता है।

>>> r = re.compile(r"[^a-zA-Z0-9-]") 
>>> s = "some#%te_xt&with--##%--5 hy-phens *#" 
>>> r.sub("",s) 
'sometextwith----5hy-phens' 

ध्यान दें कि यह रिक्त स्थान भी बदल सकता है (जो निश्चित रूप से आप चाहते हैं)।


संपादित करें: SilentGhost सुझाव दिया है यह संभावना के लिए इंजन, एक परिमाणक के साथ कार्रवाई करने के लिए इस स्थिति में आप केवल उपयोग कर सकते हैं सस्ता हो सकता है:

re.compile(r"[^a-zA-Z0-9-]+") 

+ बस किसी भी रन का कारण होगा एक ही समय में सभी मिलान (और प्रतिस्थापित) के लिए लगातार मेल खाने वाले पात्रों का।

+2

+1 आप कर रहे हैं ठीक है, मेरा उत्तर हटा दिया तुम्हारा को शामिल किया गया के रूप में मुझे लगता है कि वह क्या चाहता है ... किसी भी नहीं चरित्र एक नंबर से मिलान करने के , पत्र, न ही हाइफ़न। – birryree

+0

क्वांटिफायर यह सस्ता बना देगा। – SilentGhost

+0

बिल्कुल सही। धन्यवाद! – ash

4

\w मैचों अक्षर या अंक, पूरे सेट हाइफन में जोड़ें, फिर नकारना: r"[^\w-]"

+0

मुझे लगता है कि अंडरस्कोर को गैर-अल्फान्यूमेरिक माना जाता है;) – SilentGhost

+0

यह अंडरस्कोर वर्ण से मेल नहीं खाता/प्रतिस्थापित नहीं करेगा, जो ओपी का वर्तमान रेगेक्स करता है। – eldarerathis

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