Erstatt tegn i Python-strenger: 4 enkle metoder!

Denne veiledningen utforsker forskjellige metoder for å endre tegn i en tekststreng i Python, inkludert bruk av innebygde strengfunksjoner, regulære uttrykk og andre teknikker.

Strenger i Python er grunnleggende datatyper som lagrer sekvenser av Unicode-tegn. I motsetning til noen andre datastrukturer i Python, som lister og ordbøker, er strenger uforanderlige. Dette betyr at du ikke kan endre en eksisterende streng direkte.

Det kan likevel være nødvendig å manipulere strenger, for eksempel for å fjerne unødvendige mellomrom i starten eller slutten, endre bokstavstørrelse, eller erstatte ett tegn med et annet.

Så, hvordan endrer vi strenger i Python? Og spesifikt, hvordan erstatter vi et tegn i en streng? Vi skal se nærmere på dette i denne veiledningen, og vi vil fokusere på:

  • Uforanderligheten til strenger i Python.
  • Python sine strengfunksjoner for strengmanipulasjon.
  • Forskjellige måter å endre et tegn i en streng.

La oss starte!

Uforanderlighet av Python-strenger

Som nevnt tidligere, er strenger i Python uforanderlige. Det betyr at du ikke kan endre en eksisterende streng direkte. Du kan ikke endre den på stedet.

Tenk deg for eksempel strengen «Python-programmering!».

Du kan hente ut et enkelt tegn fra strengen ved hjelp av indeksen, eller en delstreng ved å spesifisere start- og sluttindeks, som vist her:

>>> min_streng = "Python-programmering!"
>>> min_streng[0]
'P'
>>> min_streng[4]
'o'
>>> min_streng[1:9]
'ython pr'
>>> min_streng[9]
'o'

La oss si at du ønsker å erstatte bokstaven «o» med tallet «0».

Du vet at bokstaven «o» finnes på indeks 4 og 9 (se koden over). Men hvis du prøver å endre tegnet direkte – ved den spesifikke indeksen – til «0», vil du få følgende feilmelding:

>>> min_streng[4] = '0'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

Python tilbyr et sett med strengfunksjoner som opererer på en eksisterende streng og returnerer en ny streng med de nødvendige endringene.

Les også: Python-programmer for strengoperasjoner.

Du kan bruke strengfunksjoner sammen med listeforståelser, løkker og regulære uttrykk for å utføre oppgaver knyttet til strengmanipulasjon. I denne veiledningen skal vi se på ulike måter å endre et tegn i en Python-streng.

Endre et tegn i Python-strenger

Det finnes mange situasjoner der du kanskje vil endre tegn eller delstrenger i en Python-streng. Her er noen eksempler:

  • Tekstbehandling: Når du jobber med tekstdata, må du kanskje rense teksten ved å erstatte visse tegn. For eksempel fjerne eller endre spesialtegn, overflødige mellomrom eller uønskede symboler.
  • Formatering: Du vil kanskje endre formateringen av tekst, for eksempel bruke store bokstaver eller konvertere tekst til små bokstaver. For eksempel sørge for konsekvent bruk av store bokstaver i titler eller overskrifter.
  • Datamaskinering: Det er ofte nødvendig å maskere sensitiv informasjon, for eksempel personnumre eller kredittkortnumre, for å beskytte sensitive data samtidig som formatet bevares.
  • Håndtering av URL-er og filstier: Når du arbeider med URL-er eller filstier, må du kanskje endre visse tegn for å sikre at de er korrekt formatert og kompatible med nettlesere eller filsystemer.

Vi skal ta et enkelt eksempel der vi endrer et tegn i en streng.

Vi starter med en tilnærming som bruker løkker og betingede utsagn, og deretter diskuterer vi andre, bedre metoder for å oppnå det samme.

La oss bruke samme eksempel der vi erstatter «o» med «0» i strengen «Python-programmering!».

Slik kan vi gå gjennom strengen ved hjelp av en for-løkke og endre det spesifikke tegnet:

original_streng = "Python-programmering!"
ny_streng = ""
for tegn in original_streng:
    if tegn == "o":
        ny_streng += "0"
    else:
        ny_streng += tegn
print(ny_streng)

I denne metoden går vi manuelt gjennom hvert tegn i original_streng. Hvis tegnet er «o», legger vi til «0» i ny_streng; ellers legger vi til det samme tegnet. På denne måten endrer vi tegn og bygger ny_streng.

# Output
Pyth0n pr0grammering!

Det kan være vanskelig å vedlikeholde kode som bruker for-løkker og betingede if-setninger. Spesielt når du trenger å endre en delstreng eller flere tegn.

Det finnes bedre metoder for å endre tegn eller en delstreng, og vi skal se på dem i de følgende avsnittene.

#1. Bruk av str.replace()

Vi kan bruke strengfunksjonen replace() til å erstatte et tegn eller en delstreng med en annen streng. Ved bruk av str.replace(gammel, ny) vil alle forekomster av det gamle tegnet eller delstrengen bli erstattet med det nye tegnet eller delstrengen.

Her bruker vi replace()-metoden til å endre bokstaven «o» med tallet «0» i original_streng.

original_streng = "Python-programmering!"
ny_streng = original_streng.replace("o", "0")
print(ny_streng)

Den resulterende strengen lagres i ny_streng.

# Output
Pyth0n pr0grammering!

#2. Bruk av listeforståelse og join()-metoden

For å endre et tegn i en Python-streng, kan vi bruke listeforståelse sammen med strengfunksjonen join().

La oss se hvordan vi kan skrive om eksemplet vårt:

  • Vi kan bruke en listeforståelse til å iterere gjennom hvert tegn i original_streng. Hvis tegnet er «o», erstatter vi det med «0», og beholder det samme tegnet ellers.
  • Deretter bruker vi str.join() for å kombinere disse tegnene til en enkelt streng, som resulterer i ny_streng. Dette er et mer konsist alternativ til løkker og betinget forgrening når du trenger å erstatte et enkelt tegn i en streng.
original_streng = "Python-programmering!"
ny_streng = ''.join(['0' if tegn == 'o' else tegn for tegn in original_streng])
print(ny_streng)

Vi får det forventede resultatet:

# Output
Pyth0n pr0grammering!

#3. Bruk av regulære uttrykk

En annen metode for å endre tegn i Python-strenger er å bruke regulære uttrykk (regex). Python har en innebygd re-modul for operasjoner med regulære uttrykk. Med regulære uttrykk kan du spesifisere et mønster å søke etter, en streng å søke i og en streng å erstatte det matchende mønsteret med.

Her bruker vi sub()-funksjonen fra re-modulen med syntaksen re.sub(mønster, erstatning, streng).

import re

original_streng = "Python-programmering!"
ny_streng = re.sub(r'o', '0', original_streng)
print(ny_streng)

Mønsteret r’o» samsvarer med alle forekomster av bokstaven «o» i original_streng og erstatter dem med «0».

# Output
Pyth0n pr0grammering!

Du kan bruke regulære uttrykk til å matche mer komplekse mønstre. La oss ta eksemplet med å maskere kredittkortnumre. La oss si at vi ønsker å erstatte alle tall – unntatt de fire siste sifrene – med en «X». Slik kan vi gjøre det:

import re

def mask_kredittkort(kortnummer):
    # Bruk regulære uttrykk for å matche og endre tegn
    maskert_nummer = re.sub(r'\d(?=\d{4})', 'X', kortnummer)
    return maskert_nummer

# Eksempel på bruk:
kredittkortnummer = "1234567898765432"
maskert_nummer = mask_kredittkort(kredittkortnummer)
print(maskert_nummer)

Og her er resultatet:

# Output
XXXXXXXXXXXX5432

For å holde regex enkel, har vi ikke inkludert bindestreken, men du kan endre eksemplet etter behov.

#4. Bruk av str.maketrans() og str.translate()

Metodene str.maketrans() og str.translate() i Python brukes til å utføre oversettelse og erstatning på tegnnivå i strenger.

Hvordan str.maketrans() fungerer

Metoden maketrans() brukes til å lage en oversettelsestabell som spesifiserer hvordan tegn skal erstattes i en streng. Du kan bruke den med syntaksen: str.maketrans(x, y). Her er:

  • x strengen som inneholder tegn som du vil endre.
  • y er strengen som inneholder tegn som du vil erstatte x med.

Metoden maketrans() genererer en oversettelsestabell basert på tilordningene fra x til y. Du kan deretter bruke denne oversettelsestabellen med str.translate()-metoden for å utføre selve endringen.

Hvordan str.translate() fungerer

Du kan bruke str.translate()-metoden til å bruke oversettelsestabellen som ble opprettet med str.maketrans() på en streng. Den utfører tegn-for-tegn-erstatning basert på tilordningene definert i oversettelsestabellen. Og den returnerer en ny streng med de angitte tegnendringene.

Slik kan du bruke translate()-metoden:

ny_streng = original_streng.translate(oversettelsestabell)
  • original_streng: Inndatastrengen du vil endre.
  • oversettelsestabell: Oversettelsestabellen opprettet med str.maketrans() som definerer tegntilordningene.

Ved å kombinere både maketrans()- og str.translate()-metodene, la oss skrive om eksemplet vårt slik:

original_streng = "Python-programmering!"
oversettelsestabell = str.maketrans('o', '0')
ny_streng = original_streng.translate(oversettelsestabell)
print(ny_streng)

Her lager vi en oversettelsestabell ved hjelp av str.maketrans(«o», «0») for å spesifisere at «o» skal erstattes med «0». Deretter bruker vi translate()-metoden på original_streng for å bruke denne oversettelsen, som resulterer i ny_streng.

# Output
Pyth0n pr0grammering!

Disse metodene er nyttige for oppgaver som å endre ett enkelt tegn og andre tegnmanipuleringer i strenger.

Konklusjon

La oss oppsummere hva vi har lært.

Strenger i Python er uforanderlige. Når du skal endre et tegn i en Python-streng, kan du derfor ikke bare tilordne tegnet på nytt ved en bestemt indeks. Vi har gått gjennom følgende metoder for å endre et tegn eller flere tegn i en Python-streng:

  • Bruk str.replace(gammel, ny) for å erstatte alle forekomster av gammel med ny delstreng.
  • Du kan også bruke listeforståelse og join()-metoden. Bruk listeforståelse for å endre tegn og join()-metoden for å slå sammen listen over tegn til en streng.
  • Du kan bruke mønstertilpasning med regulære uttrykk for å erstatte forekomster av et tegn eller et mønster. Bruk sub()-funksjonen med re.sub(mønster, erstatning, streng).
  • Bruk str.maketrans() for å lage en oversettelsestabell, og translate()-metoden for å bruke oversettelsestabellen på den originale strengen.

Sørg for å kode noen eksempler for å forstå disse teknikkene bedre. Deretter kan du lære hvordan du fjerner det siste tegnet fra en Python-streng.