तुम सिर्फ एक नकार चरित्र वर्ग के बजाय इस्तेमाल कर सकते हैं:
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-]+")
+
बस किसी भी रन का कारण होगा एक ही समय में सभी मिलान (और प्रतिस्थापित) के लिए लगातार मेल खाने वाले पात्रों का।
+1 आप कर रहे हैं ठीक है, मेरा उत्तर हटा दिया तुम्हारा को शामिल किया गया के रूप में मुझे लगता है कि वह क्या चाहता है ... किसी भी नहीं चरित्र एक नंबर से मिलान करने के , पत्र, न ही हाइफ़न। – birryree
क्वांटिफायर यह सस्ता बना देगा। – SilentGhost
बिल्कुल सही। धन्यवाद! – ash