Vaikka merk­ki­jo­not ovat muut­tu­mat­to­mia Pyt­ho­nis­sa, voit luoda uusia merk­ki­jo­no­ja olemassa olevien pohjalta. Eri­lai­sil­la me­ne­tel­mil­lä voit poistaa tai korvata merkkejä luo­dak­se­si haluamasi merk­ki­jo­non.

Mitä muut­tu­mat­to­muus tar­koit­taa?

Muut­tu­mat­to­muus tar­koit­taa, että kun objekti on luotu, sitä ei voi enää muuttaa. Pyt­ho­nis­sa merk­ki­jo­not ovat muut­tu­mat­to­mia. Kun poistat merkkejä merk­ki­jo­nos­ta Pythonin me­ne­tel­mil­lä, luot käy­tän­nös­sä uuden merk­ki­jo­non, joka sisältää al­ku­pe­räi­sen merk­ki­jo­non tiettyjä ele­ment­te­jä. Al­ku­pe­räi­nen merk­ki­jo­no pysyy kuitenkin muut­tu­mat­to­ma­na. Merk­ki­jo­no­jen muut­tu­mat­to­muus auttaa te­hok­kaas­sa muistin hal­lin­nas­sa ja estää odot­ta­mat­to­mia tuloksia merk­ki­jo­no­ja kä­si­tel­täes­sä.

Yk­sit­täis­ten merkkien tai merk­ki­jo­no­jen pois­ta­mi­nen ja kor­vaa­mi­nen

Voit poistaa tiettyjä merkkejä merk­ki­jo­nos­ta käyt­tä­mäl­lä str.replace() tai re.sub() yhdessä sään­nöl­li­sen lausek­keen kanssa, joka edustaa pois­tet­ta­via merkkejä tai kuvioita.

str.replace()

str.replace() käytetään tekstin osien pois­ta­mi­seen ja kor­vaa­mi­seen osa­merk­ki­jo­nol­la.

original_string = "Hello, Python#"
 
modified_string = original_string.replace('#', '!')
print(original_string)  # Output: Hello, Python#
print(modified_string)  # Output: Hello, Python!
Python

Yllä olevassa esi­mer­kis­sä replace() korvaa merkin “#” kohdassa original_string huu­to­mer­kil­lä “!”.

re.sub()

Funktio re.sub() kuuluu Pythonin re-moduuliin. Tämän funktion avulla voit etsiä merk­ki­jo­nois­ta sään­nöl­li­siä lausek­kei­ta ja korvata ne muilla merkeillä.

import re
original_string = "Hello, World! @#$%^&*"
modified_string = re.sub(r'[@#$%^&*]', '', original_string)
print(original_string)  # Output: Hello, World! @#$%^&*
print(modified_string)  # Output: Hello, World!
Python

Kuvio [@#$%^&*] on sään­nöl­li­nen lauseke, joka vastaa eri­kois­merk­ke­jä @, #, $, %, ^, &,*. Toiminto re.sub() etsii kaikki kuvion vas­taa­vuu­det al­ku­pe­räi­ses­tä merk­ki­jo­nos­ta original_string ja korvaa ne tyhjällä merk­ki­jo­nol­la ''. Yllä olevassa esi­mer­kis­sä tal­len­sim­me tuloksen muut­tu­jaan modified_string ja tu­los­tim­me sen.

Kuinka poistaa kaikki merkit paitsi kirjaimet

Voit käyttää erilaisia me­ne­tel­miä pois­taak­se­si kaikki kirjaimet merk­ki­jo­nos­ta. Seu­raa­vas­sa tar­kas­te­lem­me, miten tämä voidaan tehdä seu­raa­vil­la me­ne­tel­mil­lä: isalpha(), filter() ja re.sub().

re.sub()

import re
original_string = "Hello, 123 World! @#$%^&*"
modified_string = re.sub(r'[^a-zA-Z]', '', original_string)
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: HelloWorld
Python

Sään­nöl­li­nen lauseke [^a-zA-Z] vastaa mitä tahansa merkkiä, joka ei ole pieni tai iso kirjain. Tämän seu­rauk­se­na modified_string koostuu vain al­ku­pe­räi­sen merk­ki­jo­non kir­jai­mis­ta. Huomaa, että tämä poistaa myös kir­jain­ten väliset vä­li­lyön­nit.

isalpha()

original_string = "Hello, 123 World! @#$%^&*"
modified_string = ''.join(char for char in original_string if char.isalpha())
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: HelloWorld
Python

Tässä esi­mer­kis­sä käytimme lis­ta­kä­si­tys­tä tois­ta­maan jokaisen kirjaimen original_string:ssä. isalpha() tarkistaa, onko merkki kirjain. Kirjaimet lisätään sitten uuteen modified_stringeen, kun taas kaikki muut merkit ohitetaan.

filter()

original_string = "Hello, 123 World! @#$%^&*"
filtered_chars = filter(str.isalpha, original_string)
modified_string = ''.join(filtered_chars)
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: HelloWorld
Python

str.isalpha() menetelmä palauttaa True, jos merkki on kirjain, muuten se palauttaa False. filter() funktio luo suo­da­ti­nob­jek­tin, joka sisältää vain merkit, jotka täyttävät str.isalpha() ehdon. Näin voimme poistaa kaikki merkit original_string, jotka eivät ole kirjaimia.

Kuinka poistaa kaikki merkit paitsi numerot

Kuten edel­li­sis­sä esi­mer­keis­sä, voit erottaa numerot käyt­tä­mäl­lä re.sub(), filter() ja nu­mee­ris­ta vas­ti­net­ta isalpha(), isdigit().

re.sub()

import re
original_string = "Hello, 123 World! @#$%^&*"
modified_string = re.sub('[^0-9]', '', original_string)
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: 123
Python

Luvulla 0-9 voimme mää­ri­tel­lä alueen, joka kattaa kaikki numerot 0:sta 9:ään. Yh­dys­merk­ki - numeron 0 ja 9 välissä toimii alueo­pe­raat­to­ri­na. Edeltävä ^ tar­koit­taa kaikkia merkkejä, jotka eivät kuulu mää­ri­tel­tyyn alueeseen 0:sta 9:ään. Nämä merkit korvataan tyhjillä merkeillä käyt­tä­mäl­lä re.sub.

filter()

original_string = "Hello, 123 World! @#$%^&*"
filtered_chars = filter(str.isdigit, original_string)
modified_string = ''.join(filtered_chars)
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: 123
Python

Toiminto filter() yhdessä toiminnon isdigit() kanssa voi suodattaa numerot merk­ki­jo­nos­ta ja poistaa loput merkit. Kun näitä käytetään yhdessä, uusi merk­ki­jo­no näyttää numerot 123.

isdigit()

original_string = "Hello, 123 World"
modified_string = ''.join('*' if not char.isdigit() else char for char in original_string)
print(original_string) # Output: Hello, 123 World
print(modified_string) # Output: *******123******
Python

Voimme myös käyttää isdigit() luettelon ym­mär­tä­mi­ses­sä, jotta voimme käydä läpi jokaisen char original_stringssa. Merkit, jotka eivät ole de­si­maa­li­lu­ku­ja (not char.isdigit() on totta), korvataan tähdellä *, muuten ne pysyvät ennallaan.

Kuinka poistaa merkkejä käyt­tä­mäl­lä translate()

translate() on Pythonin si­sään­ra­ken­net­tu toiminto, jota käytetään merkkien edis­ty­nee­seen kor­vaa­mi­seen ja kään­tä­mi­seen merk­ki­jo­nois­sa. Se tarjoaa tehokkaan tavan korvata merkkejä kään­nös­ta­bel­lin avulla.

original_string = "Hello, World! Remove vowels."
translation_table = str.maketrans(dict.fromkeys('aeiouAEIOU', '*'))
modified_string = original_string.translate(translation_table)
print(original_string) # Output: Hello, World! Remove vowels.
print(modified_string) # Output: H*ll*, W*rld! R*m*v* v*w*ls.
Python

Yllä olevassa esi­mer­kis­sä käytimme str.maketrans() ja dict.fromkeys() kään­nös­ta­bel­lin luomiseen. Tämä määrittää, että kaikki vokaalit korvataan *lla. Tabellia so­vel­le­taan sitten al­ku­pe­räi­seen merk­ki­jo­noon, jolloin saadaan modified_string.

Siirry pää­va­lik­koon