Python ile bir dize belirli karakterleri kaldırın
Bir dize python kullanarak özel karakterleri kaldırmak için çalışıyorum. Bu şu anda kullanıyorum kodudur. Ne yazık ki dize için bir şey yapmak gibi görünüyor.
for char in line:
if char in " ?.!/;:":
line.replace(char,'')
Bunu nasıl düzgün yapabilirim?
CEVAP
Python dizelerideÄŸiÅŸmez(deÄŸiÅŸtirilemez). Bu nedenle, line.replace(...)
etkisi sadece yeni bir dize oluşturmak için, yerine eski bir değişiyor. Gerekiryeniden bağlayınbu değişkenin yeni değeri, o karakter kaldırılmış almak için (ata) line
.
Ayrıca, sizin yaptığınız şekilde biraz yavaş, nispeten olacak. Biraz da iki kat-iç içe geçmiş bir yapı görecek olan deneyimli pythonators, kafasını karıştırabilir ve bir şey daha karmaşık oluyor bir an için düşünün.
str.translate
kullanabilirsiniz:
line = line.translate(None, '!@#$')
sadece Python ve daha yeni Python 2 2.6.çalışır x sürümleri * —
ya re.sub
ile normal ifade deÄŸiÅŸtirme
import re
line = re.sub('[!@#$]', '', line)
Karakterler ayraç olarak kabul ederkarakter sınıfı. Sınıf sub
ikinci parametre ile deÄŸiÅŸtirilir hangi line
herhangi bir karakter: boÅŸ bir dize.
daha önce Piton ile uyumluluk için*, oluşturabilirsiniz bir "boş" masa None
yerine geçmek çeviri:
import string
line = line.translate(string.maketrans('', ''), '!@#$')
Burada string.maketrans
bir oluşturmak için kullanılırçeviri tablosusadece bir dizi sıralı değerler ile 255 arasında karakter içeren 0.,
Python 3 kullanarak henüz başlamadım, Python 3 için/bu tercüme nasıl emin değilim.
Kevpie cevapları üzerinde comment bahseder gibi, ve documentation for str.translate
şeyler de belirtildiği gibi farklı Unicode dizeleri ile çalışır.
Bir unicode dize translate
yöntemin çağrılması, yukarıda verdiğimiz ikinci parametre olarak geçirmek. Ayrıca ilk parametre olarak None
geçebilir mi, ya da string.maketrans
hatta çeviri bir tablo. Bunun yerine, tek parametre olarak bir sözlük geçirir. Bu sözlük haritalarsıralı değerlerkarakter (yani sonuç arama ord
bunları) sıra değerleri karakterleri değiştirmek gerekir onları, ya da işe yaramayacak bizi— None
gösteren olmalılar silinmiş.
Bir Unicode dize üzerinde dans yapmak için bir şey gibi
translation_table = dict.fromkeys(map(ord, '!@#$'), None)
unicode_line = unicode_line.translate(translation_table)
Burada dict.fromkeys
map
özlü bir sözlük içeren oluşturmak için kullanılır
{ord('!'): None, ord('@'): None, ...}
Dize içinde belirli bir karakterden so...
Dize değil alfasayısal karakterleri ka...
Nasıl Python ile bir dize sayısal olma...
Python bir dize son 3 karakterleri Kal...
Eğer dize belirli kelimeler içeriyorsa...