Python'da bir dizeden belirli karakterleri kaldırma
Python kullanarak bir karakter dizisinden belirli karakterleri kaldırmaya çalışıyorum. Şu anda kullandığım kod bu. Ne yazık ki dizgiye hiçbir şey yapmıyor gibi görünüyor.
for char in line:
if char in " ?.!/;:":
line.replace(char,'')
Bunu nasıl düzgün yapabilirim?
488
3
Python'daki dizgiler değiştirilemez (değiştirilemez). Bu nedenle,
line.replace(...)
komutunun etkisi eskisini değiştirmek yerine sadece yeni bir string oluşturmaktır. Bu değişkenin bu karakterler kaldırılarak yeni değeri almasını sağlamak için onuline
değişkenine yeniden bağlamanız (atamanız) gerekir.Ayrıca, bunu yapma şekliniz nispeten biraz yavaş olacaktır. Ayrıca, iki kat iç içe geçmiş bir yapı görüp bir an için daha karmaşık bir şey olduğunu düşünecek olan deneyimli python kullanıcıları için biraz kafa karıştırıcı olması muhtemeldir.
Python 2.6 ve daha yeni Python 2.x sürümlerinden * başlayarak, bunun yerine
str.translate
kullanabilirsiniz (ancak Python 3 farklılıkları için okumaya devam edin):veya
re.sub
ile düzenli ifade değiştirmeParantez içine alınan karakterler bir karakter sınıfı oluşturur. Bu sınıfta yer alan
line
içindeki karakterlersub
öğesinin ikinci parametresiyle değiştirilir: boş bir dize.Python 3'te dizgiler Unicode'dur. Biraz farklı çevirmeniz gerekecek. kevpie cevaplardan birindeki yorum'da bundan bahsediyor ve str.translate belgesinde de belirtiliyor.
Bir Unicode dizesinin
translate
yöntemini çağırırken, yukarıda kullandığımız ikinci parametreyi geçemezsiniz. Ayrıca ilk parametre olarakNone
parametresini ya dastring.maketrans
metodundan bir çeviri tablosunu da geçiremezsiniz. Bunun yerine, tek parametre olarak bir sözlük geçirirsiniz. Bu sözlük, karakterlerin ordinal değerlerini (yani, karakterler üzerindeord
çağrısının sonucunu), onların yerine geçmesi gereken karakterlerin sıralı değerleriyle ya da -bizim için kullanışlı bir şekilde- silinmesi gerektiğini belirtmek içinNone
ile eşler.Yukarıdaki dansı bir Unicode dizesi ile yapmak için şöyle bir şey çağırırsınız
Burada
dict.fromkeys
vemap
kısa ve öz olarak aşağıdakileri içeren bir sözlük oluşturmak için kullanılırDaha da basiti, başka bir cevabın da belirttiği gibi, sözlüğü yerinde oluşturun:
* önceki Python'larla uyumluluk için,
None
yerine geçmek üzere bir "null" çeviri tablosu oluşturabilirsiniz:Burada
string.maketrans
bir çeviri tablosu oluşturmak için kullanılır; bu tablo 0 ile 255 arasındaki sıra değerlerine sahip karakterleri içeren bir dizedir.Python'da dizeler değişmezdir. Değiştirme işleminden sonra
replace
metodu yeni bir string döndürür. Deneyin: