Jak nahradit znak v řetězci pomocí Pythonu

Tento tutoriál popisuje různé způsoby, jak nahradit znak v řetězci Pythonu: pomocí vestavěných řetězcových metod, regulárních výrazů a dalších.

Řetězce v Pythonu jsou vestavěné datové struktury, které ukládají sekvenci znaků Unicode. Na rozdíl od některých datových struktur Pythonu, jako jsou seznamy a slovníky, jsou řetězce neměnné. To znamená, že nemůžete upravit existující řetězec.

Při práci s řetězci však možná budete chtít manipulovat – odstraňovat mezery na začátku a na konci, měnit velká písmena, nahrazovat znak jiným a mnoho dalšího.

Jak tedy manipulujeme s řetězci Pythonu? A jak nahradíme znak v řetězci Pythonu? Na tyto otázky odpovíme v tomto tutoriálu se zaměřením na:

  • Neměnnost řetězců Pythonu
  • Řetězcové metody Pythonu pro manipulaci s řetězci
  • Různé způsoby, jak nahradit znak v řetězci

Začněme…

Neměnnost řetězců Pythonu

Jak již bylo zmíněno, řetězce Pythonu jsou neměnné. Nemůžete tedy upravit existující řetězec na místě. nemůžete upravit existující řetězec na místě

Uvažujme například řetězec „Programování v Pythonu!“.

K jednomu prvku řetězce můžete přistupovat pomocí indexu a podřetězce zadáním řezu se začátkem a koncem, jak je znázorněno:

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

Řekněme, že chcete nahradit písmeno „o“ číslicí „0“.

Víte, že máte o na indexech 4 a 9 (viz fragment kódu výše). Ale pokud se pokusíte přímo nastavit znak – na konkrétním indexu – na „0“, dostanete následující chybu:

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

Python poskytuje sadu řetězcových metod, které působí na existující řetězec a vracejí nový řetězec s požadovanými změnami.

Čtěte také: Programy v Pythonu pro operace s řetězci.

K provádění úloh manipulace s řetězci tedy můžete použít řetězcové metody spojené s porozuměním seznamu, smyčkami a regulárními výrazy. V tomto tutoriálu se podíváme na různé způsoby, jak nahradit znak v řetězci Pythonu.

  Nejlepší podnikový LMS pro posílení vaší organizace

Nahrazení znaku v řetězcích Python

Existuje mnoho případů použití, ve kterých možná budete chtít nahradit znaky nebo podřetězce v řetězci Pythonu. Tady jsou některé z nich:

  • Čištění textu: Při práci s textovými daty může být nutné vyčistit text nahrazením určitých znaků. Například odstranění nebo nahrazení speciálních znaků, nadbytečných bílých míst nebo nežádoucích symbolů.
  • Formátování: Možná budete chtít změnit formátování textu, například psaní velkých písmen nebo převod textu na malá písmena. Například zajištění konzistentního používání velkých písmen v názvech nebo nadpisech.
  • Maskování dat: Často budete muset maskovat citlivé informace, jako jsou osobní identifikační čísla nebo čísla kreditních karet, abyste ochránili citlivá data a zároveň zachovali formát.
  • Zpracování adres URL a cest: Při práci s adresami URL nebo cestami k souborům budete možná muset nahradit určité znaky, abyste se ujistili, že jsou správně naformátované a kompatibilní s webovými prohlížeči nebo systémy souborů.

Vezmeme si jednoduchý příklad nahrazení znaku v řetězci.

Začneme s přístupem, který používá cykly a podmíněné příkazy, a poté přistoupíme k diskusi o dalších lepších metodách, jak toho dosáhnout.

Vezměme si stejný příklad nahrazení ‚o‘ ‚0‘ v řetězci „Python programming!“.

Zde je návod, jak můžeme procházet řetězec pomocí smyčky for a nahradit konkrétní znak:

original_string = "Python programming!"
new_string = ""
for char in original_string:
    if char == "o":
        new_string += "0"
    else:
        new_string += char
print(new_string)  

V tomto přístupu ručně procházíme každý znak v původním_řetězci. Pokud je znakem ‚o‘, přidáme ‚0‘ k novému_řetězci; jinak připojíme stejný znak. Tímto způsobem provedeme náhradu znaků a vytvoříme nový_řetězec.

# Output
Pyth0n pr0gramming!

Použití cyklu for a podmíněného větvení s příkazy if je obtížné udržovat. Zvláště když potřebujete nahradit podřetězec nebo více znaků.

Existují lepší přístupy k nahrazení znaků nebo podřetězců a podíváme se na ně v následujících částech.

#1. Použití str.replace()

K nahrazení znaku nebo podřetězce jiným řetězcem můžeme použít řetězcovou metodu replace(). Použití str.replace(old, new) nahradí všechny výskyty starého znaku nebo podřetězce novým znakem nebo podřetězcem.

  Výběr nejlepšího softwaru pro řízení projektů

Zde používáme metodu replace() písmeno ‚o‘ s číslicí ‚0‘ v původním_řetězci.

original_string = "Python programming!"
new_string = original_string.replace("o", "0")
print(new_string) 

Výsledný řetězec je v new_string.

# Output
Pyth0n pr0gramming!

#2. Použití List Comprehension a metody join().

Chcete-li nahradit znak v řetězci Python, můžeme použít porozumění seznamu ve spojení s metodou string join().

Podívejme se, jak můžeme přepsat náš příklad:

  • Můžeme použít porozumění seznamu k iteraci každého znaku v původním_řetězci. Pokud je znak ‚o‘, nahradíme ho ‚0‘ a jinak ponecháme stejný znak.
  • Potom použijeme str.join() ke spojení těchto znaků do jednoho řetězce, což vede k novému_řetězci. Všimněte si, že toto je stručnější alternativa k opakování a podmíněnému větvení, když potřebujete nahradit jeden znak v řetězci.
original_string = "Python programming!"
new_string = ''.join(['0' if char == 'o' else char for char in original_string])
print(new_string) 

Dostaneme očekávaný výstup:

# Output
Pyth0n pr0gramming!

#3. Použití regulárních výrazů

Další metodou, jak nahradit znaky v řetězcích Pythonu, je použití regulárních výrazů (regex). Python je dodáván s vestavěným re modul pro operace shody regulárních výrazů. Pomocí regulárního výrazu můžete určit vzor, ​​který se má hledat, řetězec, který se má prohledávat, a řetězec, kterým se má odpovídající vzor nahradit.

Zde použijeme funkci sub() z modulu re se syntaxí re.sub(vzor, ​​nahrazení, řetězec).

import re

original_string = "Python programming!"
new_string = re.sub(r'o', '0', original_string)
print(new_string) 

Vzor r’o‘ odpovídá všem výskytům písmene ‚o‘ v original_string a nahrazuje je ‚0‘.

# Output
Pyth0n pr0gramming!

Ke spárování složitějších vzorů můžete použít regulární výrazy. Vezměme si příklad maskování čísel kreditních karet. Řekněme, že chceme nahradit všechna čísla – kromě posledních čtyř číslic – „X“. Můžeme to udělat takto:

import re

def mask_credit_card(card_number):
    # Use regular expressions to match and replace characters
    masked_number = re.sub(r'\d(?=\d{4})', 'X', card_number)
    return masked_number

# Example usage:
credit_card_number = "1234567898765432"
masked_number = mask_credit_card(credit_card_number)
print(masked_number)

A tady je výstup:

# Output
XXXXXXXXXXXX5432

Aby byl regulární výraz jednoduchý, nezahrnuli jsme pomlčku, ale pokud chcete, můžete příklad upravit podle potřeby.

  Jak používat Google Assistant k uzamčení telefonu [No Root]

#4. Použití str.maketrans() a str.translate()

Metody str.maketrans() a str.translate() v Pythonu se používají k provádění překladu na úrovni znaků a nahrazování v řetězcích.

Jak funguje str.maketrans()

Metoda maketrans() se používá k vytvoření překladové tabulky, která určuje, jak mají být znaky nahrazeny v řetězci. Můžete jej použít se syntaxí: str.maketrans(x, y). Tady:

  • x je řetězec obsahující znaky, které chcete nahradit.
  • y je řetězec obsahující znaky, kterými chcete nahradit x.

Metoda maketrans() generuje překladovou tabulku na základě mapování z x na y. Tuto překladovou tabulku pak můžete použít s metodou str.translate() k provedení skutečného nahrazení.

Jak funguje str.translate()

K aplikaci překladové tabulky vytvořené pomocí str.maketrans() na řetězec můžete použít metodu str.translate(). Provádí nahrazování znak po znaku na základě mapování definovaných v překladové tabulce. A vrátí nový řetězec se zadanými náhradami znaků.

Zde je návod, jak můžete použít metodu translate():

new_string = original_string.translate(translation_table)
  • original_string: Vstupní řetězec, který chcete upravit.
  • translation_table: Překladová tabulka vytvořená pomocí str.maketrans(), která definuje mapování znaků.

Kombinací obou metod maketrans() a str.translate() přepišme náš příklad takto:

original_string = "Python programming!"
translation_table = str.maketrans('o', '0')
new_string = original_string.translate(translation_table)
print(new_string)

Zde vytvoříme překladovou tabulku pomocí str.maketrans(‚o‘, ‚0‘), abychom určili, že ‚o‘ má být nahrazeno ‚0‘. Potom použijeme metodu translate() na původní_řetězec, abychom použili tento překlad, což má za následek nový_řetězec.

# Output
Pyth0n pr0gramming!

Tyto metody jsou užitečné pro úkoly, jako je nahrazení znaku a další manipulace na úrovni znaků v řetězcích.

Závěr

Zopakujme si, co jsme se naučili.

Řetězce Pythonu jsou neměnné. Takže když chcete nahradit znak v řetězci Pythonu, nemůžete pouze změnit přiřazení znaku v konkrétním indexu. Prošli jsme následující přístupy k nahrazení znaku nebo více znaků v řetězci Pythonu:

  • Použijte str.replace(old, new) k nahrazení všech instancí old novým podřetězcem.
  • Můžete také použít porozumění seznamu a metodu join(). Použijte porozumění seznamu k dosažení nahrazení znaků a metodu join() ke spojení seznamu znaků do řetězce.
  • Porovnání vzoru s regulárními výrazy můžete použít k nahrazení výskytů znaku nebo vzoru. Použijte funkci sub() s re.sub(vzor, ​​nahrazení, řetězec).
  • Použijte str.maketrans() k získání překladové tabulky a metodu translate() použijte k aplikaci překladové tabulky na původní řetězec.

Ujistěte se, že kódujete několik příkladů, abyste těmto technikám lépe porozuměli. Dále se dozvíte, jak odstranit poslední znak z řetězce Pythonu.