# Kuinka poistaa merkki merkkijonosta Pythonissa

Vaikka merkkijonot ovat **muuttumattomia** Pythonissa, voit luoda uusia merkkijonoja olemassa olevien pohjalta. Erilaisilla menetelmillä voit poistaa tai korvata merkkejä luodaksesi haluamasi merkkijonon.

## Mitä muuttumattomuus tarkoittaa?

Muuttumattomuus tarkoittaa, että kun objekti on luotu, sitä ei voi enää muuttaa. Pythonissa **merkkijonot ovat muuttumattomia**. Kun poistat merkkejä merkkijonosta Pythonin menetelmillä, luot käytännössä uuden merkkijonon, joka sisältää alkuperäisen merkkijonon tiettyjä elementtejä. Alkuperäinen merkkijono pysyy kuitenkin muuttumattomana. Merkkijonojen muuttumattomuus auttaa tehokkaassa muistin hallinnassa ja estää odottamattomia tuloksia merkkijonoja käsiteltäessä.

## Yksittäisten merkkien tai merkkijonojen poistaminen ja korvaaminen

Voit poistaa tiettyjä merkkejä merkkijonosta käyttämällä `str.replace()` tai `re.sub()` yhdessä **säännöllisen lausekkeen kanssa**, joka edustaa poistettavia merkkejä tai kuvioita.

### `str.replace()`

`str.replace()` käytetään tekstin osien poistamiseen ja korvaamiseen osamerkkijonolla.

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

Yllä olevassa esimerkissä `replace()` korvaa merkin “#” kohdassa `original_string` huutomerkillä “!”.

### `re.sub()`

Funktio `re.sub()` kuuluu Pythonin **re-moduuliin**. Tämän funktion avulla voit etsiä merkkijonoista säännöllisiä lausekkeita ja korvata ne muilla merkeillä.

```Python
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!
```

Kuvio `[@#$%^&*]` on säännöllinen lauseke, joka vastaa erikoismerkkejä `@, #, $, %, ^, &,*`. Toiminto `re.sub()` etsii **kaikki kuvion vastaavuudet** alkuperäisestä merkkijonosta `original_string` ja korvaa ne tyhjällä merkkijonolla `''`. Yllä olevassa esimerkissä tallensimme tuloksen muuttujaan `modified_string` ja tulostimme sen.

## Kuinka poistaa kaikki merkit paitsi kirjaimet

Voit käyttää erilaisia menetelmiä poistaaksesi kaikki kirjaimet merkkijonosta. Seuraavassa tarkastelemme, miten tämä voidaan tehdä seuraavilla menetelmillä: `isalpha()`, `filter()` ja `re.sub()`.

### `re.sub()`

```Python
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
```

Säännöllinen lauseke `[^a-zA-Z]` vastaa mitä tahansa merkkiä, joka ei ole pieni tai iso kirjain. Tämän seurauksena `modified_string` koostuu vain alkuperäisen merkkijonon kirjaimista. Huomaa, että tämä poistaa myös kirjainten väliset välilyönnit.

### `isalpha()`

```Python
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
```

Tässä esimerkissä käytimme **listakäsitystä** toistamaan jokaisen kirjaimen `original_string`:ssä. `isalpha()` tarkistaa, onko merkki kirjain. Kirjaimet lisätään sitten uuteen `modified_string`een, kun taas kaikki muut merkit ohitetaan.

### `filter()`

```Python
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
```

`str.isalpha()` menetelmä palauttaa `True`, jos merkki on kirjain, muuten se palauttaa `False`. `filter()` funktio luo **suodatinobjektin**, 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 edellisissä esimerkeissä, voit erottaa numerot käyttämällä `re.sub()`, `filter()` ja numeerista vastinetta `isalpha()`, `isdigit()`.

### `re.sub()`

```Python
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
```

Luvulla `0-9` voimme määritellä alueen, joka kattaa kaikki numerot 0:sta 9:ään. Yhdysmerkki `-` numeron 0 ja 9 välissä toimii alueoperaattorina. Edeltävä `^` tarkoittaa kaikkia merkkejä, jotka eivät kuulu määriteltyyn alueeseen 0:sta 9:ään. Nämä merkit korvataan tyhjillä merkeillä käyttämällä `re.sub`.

### `filter()`

```Python
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
```

Toiminto `filter()` yhdessä toiminnon `isdigit()` kanssa voi suodattaa numerot merkkijonosta ja poistaa loput merkit. Kun näitä käytetään yhdessä, uusi merkkijono näyttää numerot `123`.

### `isdigit()`

```Python
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******
```

Voimme myös käyttää `isdigit()` luettelon ymmärtämisessä, jotta voimme käydä läpi jokaisen `char` `original_string`ssa. Merkit, jotka eivät ole desimaalilukuja (`not char.isdigit()` on totta), korvataan tähdellä `*`, muuten ne pysyvät ennallaan.

## Kuinka poistaa merkkejä käyttämällä `translate()`

`translate()` on Pythonin sisäänrakennettu toiminto, jota käytetään merkkien edistyneeseen korvaamiseen ja kääntämiseen merkkijonoissa. Se tarjoaa tehokkaan tavan korvata merkkejä käännöstabellin avulla.

```Python
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.
```

Yllä olevassa esimerkissä käytimme `str.maketrans()` ja `dict.fromkeys()` **käännöstabellin** luomiseen. Tämä määrittää, että kaikki vokaalit korvataan `*`lla. Tabellia sovelletaan sitten alkuperäiseen merkkijonoon, jolloin saadaan `modified_string`.

Vinkki Kun suodatat merkkijonoja, voit käyttää Python-merkkijonoindeksiä tiettyjen merkkien suodattamiseen tietyissä kohdissa. Jos haluat muotoilla merkkijonoja tietyllä tavalla, tutustu artikkeliimme Python-merkkijonoformaateista.


This is a markdown version of: [https://www.ionos.com/fi-fi/digitalguide/verkkosivustot/verkkosivujen-kehittaeminen/merkkien-poistaminen-merkkijonoista-pythonissa/](https://www.ionos.com/fi-fi/digitalguide/verkkosivustot/verkkosivujen-kehittaeminen/merkkien-poistaminen-merkkijonoista-pythonissa/) for AI/LLM consumption.