Bir string’ten boşluk (ve sekmeler) karakterlerini kırpmak istiyoruz. Örneğin: "\t örnek string\t" →
"örnek string"
dönüşümünü yapalım. C#’a aşina iseniz bunu trim() metodu ile yaptığınızı hatırlarsınız. Python’da trim() metodu bulunmuyor, ancak buna eş değer fonksiyonlar var.
Her iki taraftaki boşluklar için str.strip
kullanabiliriz.
>>> ' Hello '.strip()
'Hello'
>>> ' Hello'.strip()
'Hello'
>>> 'Bob has a cat'.strip()
'Bob has a cat'
>>> ' Hello '.strip() # tüm boşlukları sildi
'Hello'
Unutmayın str.strip()
tüm boşluk karakterlerini kaldırır. Buna tab ve yeni satır karakterleri de dahil. Sadece boşluk karakterlerini kaldırmak isteseydik strip’e aşağıdaki gibi bir argüman verirdik:
>>> " Hello\n ".strip(" ")
'Hello\n'
Hatta, strip sadece boşluk karakterlerini değil, verdiğimiz argümana eş tüm karakterleri siler:
# tüm virgül , nokta . ve tire - karakterlerini sil
title = title.strip(',.-')
Sadece sağ taraftaki karakterleri silmek için rstrip
:
s = s.rstrip()
ve, benzer şekilde, sol taraftaki boşluk için lstrip
:
s = s.lstrip()
kullanırız.
strip ile boşluk kaldırma örnekleri
Örneğin telefon numarasındaki + karakterini silelim:
In [1]: phone_number = "+14158889999"
In [2]: phone_number.strip('+')
Out[2]: '14158889999'
string başındaki ve sonundaki eşleşen kelimeleri/harfleri/karakterleri kaldırmak için kullanabiliriz:
>>> "abcdefabcdefabc".strip("cba")
'defabcdef'
Bir url’den .com ifadesini silme:
url = 'abcdc.com'
print(url.rstrip('.com'))
Python 3.8 veya daha eski sürümlerinde ayrıca endswith
ve dilimleme ile de aynı şeyi yapabilirdik:
url = 'abcdc.com'
if url.endswith('.com'):
url = url[:-4]
Python 3.9 veya daha yeni sürümlerde ise removeprefix
ve removesuffix
metotlarını kullanabiliriz:
url = 'abcdc.com'
url.removesuffix('.com') # 'abcdc'
url.removeprefix('abcdc.') # 'com'
Satır sonundaki yeni satır karakterini kaldırma
Önce rstrip()
ile bakalım: (Python 2 ve Python 3 dökümanları)
>>> 'test string\n'.rstrip()
'test string'
Python’un rstrip()
metodu sondaki tüm boşlukları (yeni satır karakteri de dahil) varsayılan olarak siler.
>>> 'test string \n \r\n\n\r \n\n'.rstrip()
'test string'
Sadece yeni satırları silmek isteseydik:
>>> 'test string \n \r\n\n\r \n\n'.rstrip('\n')
'test string \n \r\n\n\r '
rstrip()
‘in haricinde bunu strip()
ile de yapabilirdik. Hatta yeni satır karakteri text başındaysa lstrip()
ile de bu işi gerçekleştirebiliriz:
>>> s = " \n\r\n \n abc def \n\r\n \n "
>>> s.strip()
'abc def'
>>> s.lstrip()
'abc def \n\r\n \n '
>>> s.rstrip()
' \n\r\n \n abc def'
Metin ortasındaki boşluk karakterleri kaldırma
Yukarıdaki örnekler dizeleri yalnızca dizelerin sol ve sağ taraflarından kaldırır. Yani str.strip() başlangıç ve sondaki karakterler için etki ederken string ortasındaki karakterlere bir şey yapmaz
words=input("Bir input girin:")
# Örneğin bir kullanıcı aşağıdaki gibi bir input girsin:
# input = " he llo, ho w are y ou "
n=words.strip()
print(n)
# Çıktı "he llo, ho w are y ou" - olacaktır. başlangıç/son karakterleri silindi ama ortadaki karakterlere bir şey olmadı
Bunun yerine str.replace() kullanırsak diğer karakterlere de etki edebiliriz: Aşağıdaki kod ile str.replace()’in genel bir kullanımına bakalım:
def whitespace(words):
r=words.replace(' ','') # tüm boşlukları kaldır
n=r.replace(',','|') # virgülü değiştir
return n
def run():
words=input("Bir input girin:") # kullanıcı inputu al
m=whitespace(words)
return m
print(run())
output- 'hello|howareyou'
Yine, dizenin ortasındaki karakterleri kaldırmak istiyorsak, re.sub
kullanabiliriz:
import re
print(re.sub('[\s+]', '', s))
Dolayısıyla aşağıdaki çıktıyı alırız :
astringexample
Belirli bir karakterden sonra gelen karakterleri silmek
Bunun için önce index metodunu çağırıp bulmak istediğimiz karakterin ilk karşılığına bakalım. Aşağıdaki örnek için değişkenimizi şöyle tanımladık:
mystring = "This is my string\x00\x00\x00hi there\x00"
ilk karşılaştığımız \x00
karakterine index('\x00')
ile ulaşırız. Ardından string’i dilimleriz:
mystring = "This is my string\x00\x00\x00hi there\x00"
terminator = mystring.index('\x00')
print(mystring[:terminator])
# "This is my string"
Özetlemek gerekirse:
my_string.strip()
tüm baştaki ve sondaki boşluk karakterlerini (\n
, \r
, \t
, \f
, ” ” vb) silecektir.
Daha fazla esneklik için ise aşağıdakileri tercih edebiliriz:
- Baştaki karakterler için:
my_string.lstrip()
- Sondaki karakterler için:
my_string.rstrip()
- Özel karakterleri silmek için: chars:
my_string.strip('\n')
veyamy_string.lstrip('\n\r')
veyamy_string.rstrip('\n\t')
vb..