2012-10-20 35 views
48

Standart karakter olmayan herhangi bir karakteri veya yıldız işareti olan (a-z veya 0-9) gibi bir sayıyı değiştirmek istediğim bir dizilim var. Örneğin, "h^& ell", | o w] {+ orld "," h * ell * o * w * orld "ile değiştirilir. "^ &" gibi birden çok karakterin bir yıldızla değiştirileceğini unutmayın. Bunu yapmak için nasıl giderim?Dize içindeki tüm alfasayısal olmayan karakterleri değiştir

+1

([Python bir dizesinden alfanümerik karakter ama her şeyi soyma] Olası yinelenen http://stackoverflow.com/questions/1276764/stripping-everything-but-alphanumeric-chars-from -a-string-in-python) – sds

cevap

99

Kurtarma için düzenli ifadeler!

import re 

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

Örnek:

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

Unicode'u çok kullanırsanız, ASCII olmayan tüm unicode sembollerini de saklamanız gerekebilir: "re.sub (" [\ x00- \ x2F \ x3A- \ x40 \ x5B- \ x60 \ x7B- \ x7F] + "," ",":% # unicode ΣΘΙП @./\ n ")' – zhazha

+0

Dizinizde boşluk bırakmak istiyorsanız, köşeli parantez içinde boşluk bırakın: s = re .sub ('[^ 0-9a-zA-Z] +', '*', s) – stackPusher

23

pythonic yolu.

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

Bu da birden fazla birbirini takip eden olmayan uygun karakter gruplama ile ilgili değildir, yani, normal ifade çözeltiler olarak

"h^&i => "h**i değildir "h*i".

6

Dene:

s = filter(str.isalnum, s) 

Düzenleme: OP olmayan karakter değiştirmek istediği '*' fark etti. Cevabım, tüm alfanümeral olmayanları [a-zA-Z0-9] içeren \W kullanın

İlgili konular