Hur man byter ut en karaktär i en sträng med Python

By rik

Den här guiden utforskar olika metoder för att modifiera enskilda tecken inom en sträng i Python, inklusive inbyggda funktioner, reguljära uttryck och andra tekniker.

I Python är strängar grundläggande datatyper som representerar sekvenser av Unicode-tecken. Till skillnad från exempelvis listor och dictionaries är strängar oföränderliga, vilket betyder att du inte kan ändra dem direkt.

Det kan dock finnas behov av att manipulera strängar – ta bort mellanslag, ändra versaler, ersätta en karaktär med en annan – när du hanterar textdata.

Så, hur utförs strängmanipulation i Python? Och specifikt, hur ersätter man en tecken i en sträng? Vi kommer att adressera dessa frågor och täcka följande:

  • Oföränderligheten hos Python-strängar
  • Inbyggda Python-metoder för stränghantering
  • Diverse sätt att ersätta ett tecken i en sträng

Låt oss börja…

Oföränderliga Python-strängar

Som tidigare nämnts är strängar i Python oföränderliga. Detta innebär att du inte kan modifiera en befintlig sträng direkt. Du kan alltså inte ändra en sträng i befintligt skick.

Tänk dig exempelvis strängen ”Python-programmering!”.

Du kan plocka ut enskilda tecken med hjälp av index och delsträngar genom att ange start- och slutposition, som visas nedan:

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

Anta att du vill byta ut bokstaven ’o’ med siffran ’0’.

Vi vet att ’o’ förekommer på index 4 och 9 (enligt koden ovan). Men om du försöker ersätta tecknet direkt via index får du ett felmeddelande:

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

Python erbjuder en uppsättning strängmetoder som arbetar på en befintlig sträng och returnerar en ny sträng med önskade förändringar.

Se även: Python-program för strängoperationer.

Du kan kombinera strängmetoderna med listkonstruktioner, loopar och reguljära uttryck för att utföra avancerad strängmanipulation. I den här handledningen kommer vi att undersöka olika metoder för att ersätta ett tecken i en sträng.

Ersätta ett tecken i Python-strängar

Det finns många situationer där du kan behöva ersätta tecken eller sekvenser av tecken i en sträng. Här följer några vanliga exempel:

  • Textrensning: Vid bearbetning av textdata behöver man ibland rensa bort vissa oönskade tecken eller symboler, som specialtecken, extra mellanslag eller annat brus.
  • Formatering: Du kan vilja omvandla text till versaler eller gemener, för att uppnå en mer enhetlig formatering, exempelvis för rubriker.
  • Datamaskering: För att skydda känslig data som personnummer eller kortuppgifter kan du behöva maskera information samtidigt som du bibehåller ett visst format.
  • Hantering av URL:er och sökvägar: Vid hantering av webbadresser eller sökvägar kan det krävas att man byter ut vissa tecken för att säkerställa att de fungerar korrekt i webbläsare eller filsystem.

Vi börjar med ett enkelt exempel där vi ersätter ett enskilt tecken.

Vi inleder med en metod som använder loopar och villkor, och fortsätter sedan med att diskutera mer effektiva metoder för att uppnå samma resultat.

Låt oss ta samma exempel som tidigare och ersätta ’o’ med ’0’ i strängen ”Python-programmering!”.

Nedan visas ett sätt att loopa genom strängen med en for-loop och ersätta tecknet:

original_sträng = "Python programmering!"
ny_sträng = ""
for tecken in original_sträng:
    if tecken == "o":
        ny_sträng += "0"
    else:
        ny_sträng += tecken
print(ny_sträng)

I denna metod itererar vi genom varje tecken i originalsträngen. Om tecknet är ’o’ lägger vi till ’0’ till ny_sträng, annars lägger vi till det ursprungliga tecknet. På det här viset bygger vi den nya strängen med de önskade ändringarna.

# Output
Pyth0n pr0grammering!

Att använda en for-loop och villkor med if-satser kan vara besvärligt att underhålla, särskilt om du behöver byta ut flera tecken eller delsträngar.

Det finns mer effektiva metoder för att byta ut tecken eller delsträngar, och dessa kommer vi att utforska i de följande avsnitten.

#1. Använda str.replace()

Vi kan använda strängmetoden replace() för att byta ut ett tecken eller en delsträng mot en annan. Anropet str.replace(old, new) ersätter alla förekomster av det gamla tecknet eller delsträngen med det nya.

Här använder vi metoden replace() för att byta ut bokstaven ’o’ mot siffran ’0’ i den ursprungliga strängen.

original_sträng = "Python programmering!"
ny_sträng = original_sträng.replace("o", "0")
print(ny_sträng)

Den resulterande strängen lagras i ny_sträng.

# Output
Pyth0n pr0grammering!

#2. Använda Listkonstruktioner och join()-metoden

Vi kan använda en listkonstruktion i kombination med strängmetoden join() för att ersätta ett tecken i en Python-sträng.

Låt oss se hur vi kan skriva om vårt exempel:

  • Vi använder en listkonstruktion för att iterera genom varje tecken i originalsträngen. Om tecknet är ’o’ ersätter vi det med ’0’, annars behåller vi samma tecken.
  • Sedan använder vi str.join() för att sammansätta dessa tecken till en sträng och skapar ny_sträng. Denna metod är mer kompakt än loopar med villkor när du behöver ersätta ett enstaka tecken i en sträng.
original_sträng = "Python programmering!"
ny_sträng = ''.join(['0' if tecken == 'o' else tecken for tecken in original_sträng])
print(ny_sträng)

Vi får det förväntade resultatet:

# Output
Pyth0n pr0grammering!

#3. Använda reguljära uttryck

Ett annat sätt att ersätta tecken i Python-strängar är att använda reguljära uttryck (regex). Python har en inbyggd re-modul för mönstermatchning. Med regex kan du definiera ett mönster att söka efter, en sträng att söka i och en sträng att ersätta det matchade mönstret med.

Här använder vi funktionen sub() från re-modulen med syntaxen re.sub(pattern, replacement, string).

import re

original_sträng = "Python programmering!"
ny_sträng = re.sub(r'o', '0', original_sträng)
print(ny_sträng)

Mönstret r’o’ matchar alla förekomster av bokstaven ’o’ i originalsträngen och ersätter dem med ’0’.

# Output
Pyth0n pr0grammering!

Du kan använda reguljära uttryck för mer komplex mönstermatchning. Låt oss ta exemplet med maskering av kreditkortsnummer. Säg att vi vill ersätta alla siffror utom de fyra sista med ”X”. Så här kan vi åstadkomma det:

import re

def maskera_kreditkort(kortnummer):
    # Använd reguljära uttryck för att matcha och ersätta tecken
    maskerat_nummer = re.sub(r'\d(?=\d{4})', 'X', kortnummer)
    return maskerat_nummer

# Exempel
kreditkortsnummer = "1234567898765432"
maskerat_nummer = maskera_kreditkort(kreditkortsnummer)
print(maskerat_nummer)

Här är resultatet:

# Output
XXXXXXXXXXXX5432

För att hålla regex-uttrycket enkelt har vi inte inkluderat bindestreck, men du kan anpassa exemplet om det behövs.

#4. Använda str.maketrans() och str.translate()

Metoderna str.maketrans() och str.translate() i Python används för att utföra tecken-för-tecken-översättning och -ersättning i strängar.

Hur str.maketrans() fungerar

Metoden maketrans() används för att skapa en översättningstabell som anger hur tecken ska ersättas i en sträng. Du använder den med syntaxen: str.maketrans(x, y). Här är:

  • x strängen som innehåller de tecken du vill ersätta
  • y strängen som innehåller de tecken du vill ersätta x med

Metoden maketrans() genererar en översättningstabell baserat på mappningen från x till y. Du kan sedan använda denna översättningstabell med metoden str.translate() för att utföra den faktiska ersättningen.

Hur str.translate() fungerar

Du använder metoden str.translate() för att tillämpa översättningstabellen som skapats med str.maketrans() på en sträng. Den utför tecken-för-tecken-ersättning baserat på mappningen som definieras i översättningstabellen, och returnerar en ny sträng med de specificerade ersättningarna.

Så här använder du metoden translate():

ny_sträng = original_sträng.translate(översättningstabell)
  • original_sträng: Den ursprungliga strängen du vill ändra.
  • översättningstabell: Översättningstabellen skapad med str.maketrans() som definierar teckenmappningarna.

Genom att kombinera både maketrans()- och str.translate()-metoderna, kan vi skriva om vårt exempel så här:

original_sträng = "Python programmering!"
översättningstabell = str.maketrans('o', '0')
ny_sträng = original_sträng.translate(översättningstabell)
print(ny_sträng)

Här skapar vi en översättningstabell med str.maketrans(’o’, ’0’) för att ange att ’o’ ska ersättas med ’0’. Vi använder sedan translate()-metoden på original_sträng för att tillämpa översättningen, vilket resulterar i ny_sträng.

# Output
Pyth0n pr0grammering!

Dessa metoder är användbara för uppgifter som att ersätta enskilda tecken och annan manipulation på teckennivå.

Slutsats

Låt oss sammanfatta vad vi har lärt oss.

Python-strängar är oföränderliga. Det betyder att när du vill byta ut ett tecken i en sträng, kan du inte bara tilldela tecknet till ett visst index. Vi har granskat följande metoder för att ersätta ett tecken eller flera tecken i en Python-sträng:

  • Använd str.replace(old, new) för att ersätta alla förekomster av en gammal delsträng med en ny.
  • Du kan också använda listkonstruktioner och join()-metoden. Använd en listkonstruktion för att byta ut tecken och join()-metoden för att sammanfoga listan med tecken till en sträng.
  • Du kan använda mönstermatchning med reguljära uttryck för att ersätta förekomster av ett tecken eller ett mönster. Använd funktionen sub() med re.sub(pattern, replacement, string).
  • Använd str.maketrans() för att skapa en översättningstabell och translate()-metoden för att tillämpa översättningstabellen på den ursprungliga strängen.

Se till att öva med några exempel för att förstå dessa tekniker bättre. Lär dig sedan hur du tar bort det sista tecknet från en sträng.