सभी गैर-अल्फ़ान्यूमेरिक वर्णों को एक स्ट्रिंग में बदलें


100

मेरे पास एक स्ट्रिंग है जिसके साथ मैं किसी भी चरित्र को बदलना चाहता हूं जो एक मानक चरित्र या संख्या नहीं है जैसे कि (az या 0-9) एक तारांकन के साथ। उदाहरण के लिए, "h ^ & ell`। | | Ow] {+ orld" को "h * ell * o * w * orld" से बदल दिया जाता है। ध्यान दें कि "^ &" जैसे कई वर्णों को एक तारांकन के साथ बदल दिया जाता है। मैं ऐसा कैसे कर पाऊंगा?


जवाबों:


184

बचाव के लिए रेगेक्स!

import re

s = re.sub('[^0-9a-zA-Z]+', '*', s)

उदाहरण:

>>> re.sub('[^0-9a-zA-Z]+', '*', 'h^&ell`.,|o w]{+orld')
'h*ell*o*w*orld'

7
यदि आप यूनिकोड को बहुत संभालते हैं, तो आपको सभी गैर-एएससीआईआई यूनिकोड प्रतीकों को रखने की भी आवश्यकता हो सकती है:re.sub("[\x00-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+", " ", ":%# unicode ΣΘΙП@./\n")
— zhazha

यदि आप अपने स्ट्रिंग में स्थान रखना चाहते हैं, तो बस ब्रैकेट के भीतर एक स्थान जोड़ें: s = re.sub ('[^ 0-9a-zA-Z] +', '*', s)
— stackPusher

2
यदि आप एक से अधिक प्रतिस्थापन करते हैं, तो यह थोड़ा तेज प्रदर्शन करेगा यदि आप रीजेक्स को पूर्व-संकलित करते हैं, उदाहरण के लिए,import re; regex = re.compile('[^0-9a-zA-Z]+'); regex.sub('*', 'h^&ell.,|o w]{+orld')
— क्रिस

नोट भी \Wगैर-शब्द वर्णों के लिए है, यह लगभग समान है लेकिन अंडरस्कोर को एक शब्द वर्ण के रूप में अनुमति देता है (पता नहीं क्यों): docs.python.org/3.6/library/re.html#index-32
— JHS

37

पाइथोनिक तरीका है।

print "".join([ c if c.isalnum() else "*" for c in s ])

यह कई लगातार गैर-मिलान वर्णों को समूहीकृत करने से संबंधित नहीं है, अर्थात

"h^&i => "h**i"h*i"रेगेक्स समाधान के रूप में नहीं ।


11

प्रयत्न:

s = filter(str.isalnum, s)

पायथन 3 में:

s = ''.join(filter(str.isalnum, s))

संपादित करें: एहसास हुआ कि ओपी गैर-वर्णों को '*' से बदलना चाहता है। मेरा जवाब ठीक नहीं है


11

के \Wबराबर उपयोग करें [^a-zA-Z0-9_]। प्रलेखन की जाँच करें, https://docs.python.org/2/library/re.html

Import re
s =  'h^&ell`.,|o w]{+orld'
replaced_string = re.sub(r'\W+', '*', s)
output: 'h*ell*o*w*orld'

अद्यतन: यह समाधान अंडरस्कोर को भी बाहर कर देगा। यदि आप केवल वर्णमाला और संख्याओं को बाहर करना चाहते हैं, तो nneonneo द्वारा समाधान अधिक उपयुक्त है।


1
ध्यान दें कि केवल पायथन 2.x के \Wबराबर है[^a-zA-Z0-9_] । पायथन 3.x में, केवल तभी के \W+बराबर है [^a-zA-Z0-9_]यदि re.ASCII/ re.Aध्वज का उपयोग किया जाता है।
— विकिटोर स्ट्राइब्यूव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.