Selvom strenge er ufor­an­der­li­ge i Python, kan du oprette nye strenge på basis af ek­si­ste­ren­de strenge. Ved hjælp af for­skel­li­ge metoder kan du fjerne eller erstatte tegn for at oprette den ønskede streng.

Hvad betyder ufor­an­der­lig­hed?

Ufor­an­der­lig­hed betyder, at når et objekt først er oprettet, kan det ikke længere ændres. I Python er strenge ufor­an­der­li­ge. Når du fjerner tegn fra en streng ved hjælp af metoder i Python, opretter du i vir­ke­lig­he­den en ny streng med bestemte elementer fra den op­rin­de­li­ge. Den op­rin­de­li­ge streng forbliver dog uændret. Strenge er ufor­an­der­li­ge, hvilket bidrager til en effektiv hukom­mel­ses­sty­ring og for­hin­drer uventede re­sul­ta­ter, når man arbejder med strenge.

Sådan fjerner og erstatter du enkelte tegn eller en række tegn

For at fjerne bestemte tegn fra en streng kan du bruge str.replace() eller re.sub() med et regulært udtryk, der re­præ­sen­te­rer de tegn eller mønstre, du vil fjerne.

str.replace()

Funk­tio­nen str.replace() bruges til at fjerne dele af en tekst og erstatte dem med en delstreng.

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

I eksemplet ovenfor erstatter metoden replace() tegnet ‘#’ i original_string med et ud­råb­s­tegn ‘!’.

re.sub()

Funk­tio­nen re.sub() tilhører re-modulet i Python. Med denne funktion kan du søge efter regulære udtryk i strenge og erstatte dem med andre tegn.

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

Mønsteret [@#$%^&*] er et regulært udtryk, der matcher spe­ci­al­teg­ne­ne @, #, $, %, ^, &,*. Funk­tio­nen re.sub() søger efter alle match af mønsteret i den op­rin­de­li­ge streng original_string og erstatter dem med en tom streng ''. I eksemplet ovenfor gemte vi re­sul­ta­tet i variablen modified_string og udskrev det.

Sådan fjerner du alle tegn undtagen bogstaver

Du kan bruge for­skel­li­ge metoder til at fjerne alle bog­sta­ver­ne fra en streng. Nedenfor ser vi på, hvordan du gør dette med følgende metoder: isalpha(), filter() og 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

Det regulære udtryk [^a-zA-Z] matcher ethvert tegn, der ikke er et lille eller stort bogstav. Som følge heraf består modified_string kun af bog­sta­ver­ne fra den op­rin­de­li­ge streng. Husk, at dette også fjerner mel­lem­rum­me­ne mellem bog­sta­ver­ne.

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

I dette eksempel har vi brugt en liste­for­stå­el­se til at gentage hvert bogstav i original_string. Metoden isalpha() kon­trol­le­rer, om et tegn er et bogstav. Bog­sta­ver­ne indsættes derefter i en ny modified_string, mens alle andre tegn ignoreres.

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

Metoden str.isalpha() re­tur­ne­rer True, hvis tegnet er et bogstav, ellers re­tur­ne­rer den False. Funk­tio­nen filter() opretter et fil­te­ro­b­jekt, der kun in­de­hol­der de tegn, der opfylder be­tin­gel­sen str.isalpha(). Dette giver os mulighed for at fjerne alle tegn i original_string, der ikke er bogstaver.

Sådan fjerner du alle tegn undtagen tal

Som i de fo­re­gå­en­de eksempler kan du adskille tal ved hjælp af re.sub(), filter() og det numeriske ækvi­va­lent til 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

Med 0-9 kan vi definere et interval, der omfatter alle cifre fra 0 til 9. Bin­de­stre­gen - mellem 0 og 9 fungerer som en in­ter­va­l­o­pe­ra­tor. Det for­an­stil­le­de ^ betyder alle tegn, der ikke ligger inden for det angivne interval fra 0 til 9. Disse tegn erstattes af tomme tegn ved hjælp af 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

Funk­tio­nen filter() i kom­bi­na­tion med isdigit() kan filtrere tal fra en streng og fjerne de re­ste­ren­de tegn. Ved at bruge disse sammen viser den nye streng os cifrene 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

Vi kan også bruge isdigit() i en liste­for­stå­el­se til at gentage hver char i original_string. Tegn, der ikke er de­ci­mal­tal (not char.isdigit() er sandt), erstattes med en stjerne *, ellers forbliver de de samme.

Sådan fjerner du tegn ved hjælp af translate()

translate() er en indbygget funktion i Python, der bruges til avanceret tegnud­skift­ning og over­sæt­tel­se i strenge. Den giver en effektiv måde at udskifte tegn ved hjælp af en over­sæt­tel­ses­ta­bel.

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

I eksemplet ovenfor brugte vi kon­struk­tø­ren str.maketrans() og dict.fromkeys() til at oprette over­sæt­tel­ses­ta­bel­len. Dette angiver, at alle vokaler skal erstattes af *. Tabellen anvendes derefter på den op­rin­de­li­ge streng for at få modified_string.

Gå til ho­ved­me­nu­en