Як замінити символ у рядку за допомогою Python

У цьому посібнику ми розглянемо різноманітні способи модифікації рядків у Python, зокрема, як замінити певний символ. Ви дізнаєтеся про вбудовані методи для роботи з рядками, використання регулярних виразів та інші ефективні техніки.

Рядки в Python є фундаментальними структурами даних, що представляють послідовності символів Unicode. Важливо відзначити, що на відміну від деяких інших структур даних, таких як списки чи словники, рядки є незмінними. Це означає, що ви не можете безпосередньо змінювати існуючий рядок.

Проте, ви можете виконувати різноманітні операції над рядками. Наприклад, ви можете видаляти пробіли на початку та в кінці рядка, змінювати регістр літер, або ж замінювати один символ іншим.

Отже, яким чином ми можемо маніпулювати рядками в Python? Як саме замінити символ у рядку? У цьому посібнику ми відповімо на ці запитання, досліджуючи наступні теми:

  • Не змінюваність рядків у Python.
  • Методи рядків Python, які використовуються для маніпулювання рядками.
  • Різні методи заміни символу в рядку.

Розпочнімо…

Незмінність рядків Python

Як вже зазначалося, рядки в Python є незмінними. Це означає, що ви не можете редагувати існуючий рядок на місці, тобто безпосередньо.

Наприклад, розглянемо рядок “Програмування на Python!”.

Ви можете отримати доступ до окремого символу рядка, використовуючи його індекс, або ж отримати підрядок, вказавши діапазон індексів, як показано нижче:

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

Припустимо, ви хочете замінити літеру “o” на цифру “0”.

Як видно з попереднього прикладу, “o” знаходиться на позиціях 4 та 9. Проте, якщо ви спробуєте безпосередньо змінити символ за певним індексом на “0”, ви отримаєте помилку:

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

Python пропонує набір методів для роботи з рядками, які дозволяють створювати нові рядки з потрібними змінами, не змінюючи оригінальний рядок.

Також рекомендуємо ознайомитись з матеріалами про програми Python для виконання операцій з рядками.

Таким чином, ви можете комбінувати методи рядків з генераторами списків, циклами та регулярними виразами для виконання різноманітних завдань, пов’язаних з маніпулюванням рядками. У цьому посібнику ми детально розглянемо різні способи заміни символу в рядку Python.

Заміна символу в рядках Python

Існує багато сценаріїв, де вам може знадобитися замінити символи або підрядки в рядку Python. Ось деякі з них:

  • Очищення тексту: Під час обробки текстових даних часто виникає потреба очистити текст, замінюючи певні символи. Це може включати видалення або заміну спеціальних символів, зайвих пробілів або інших небажаних символів.
  • Форматування: Може знадобитися змінити форматування тексту, наприклад, зробити всі літери великими або малими. Це важливо для забезпечення послідовного використання регістру в різних частинах тексту, таких як заголовки або назви.
  • Маскування даних: Часто виникає необхідність приховувати конфіденційну інформацію, наприклад, персональні ідентифікаційні номери або номери кредитних карток. Це необхідно для захисту важливих даних, зберігаючи при цьому їх формат.
  • Обробка URL-адрес і шляхів: Під час роботи з URL-адресами або шляхами до файлів іноді потрібно замінити деякі символи, щоб забезпечити їх правильне форматування та сумісність з веб-браузерами або файловими системами.

Розглянемо простий приклад заміни символу в рядку.

Ми почнемо з підходу, що використовує цикли та умовні оператори, а потім перейдемо до обговорення більш ефективних методів.

Розглянемо той самий приклад заміни “o” на “0” в рядку “Програмування на Python!”.

Ось як можна перебрати рядок за допомогою циклу for і замінити певний символ:

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

У цьому підході ми вручну перебираємо кожен символ у рядку original_string. Якщо символ дорівнює ‘o’, ми додаємо ‘0’ до new_string; в іншому випадку ми додаємо той самий символ. Таким чином, ми виконуємо заміну символів і створюємо новий рядок new_string.

# Вивід
Pyth0n pr0gramming!

Використання циклу for та умовних операторів if може бути важко підтримувати, особливо коли потрібно замінити підрядок або кілька символів.

Існують кращі підходи для заміни символів або підрядків, і ми розглянемо їх у наступних розділах.

#1. Використання str.replace()

Ми можемо використовувати метод рядка replace(), щоб замінити символ або підрядок іншим рядком. Використання str.replace(old, new) замінює всі входження старого символу або підрядка на новий символ або підрядок.

Тут ми використовуємо літеру “o” як перший аргумент методу replace() та цифру “0” як другий аргумент для рядка original_string.

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

Результат записується до змінної new_string.

# Вивід
Pyth0n pr0gramming!

#2. Використання генератора списків та методу join().

Для заміни символу в рядку Python ми можемо використовувати генератор списків у поєднанні з методом рядка join().

Давайте розглянемо, як ми можемо переписати наш приклад:

  • Ми можемо використовувати генератор списків для перебору кожного символу в original_string. Якщо символ дорівнює “o”, ми замінюємо його на “0”, а в іншому випадку залишаємо той самий символ.
  • Потім ми використовуємо str.join(), щоб об’єднати ці символи в один рядок, отримуючи new_string. Зауважте, що це більш стисла альтернатива використанню циклу та умовного розгалуження, коли потрібно замінити лише один символ у рядку.
original_string = "Python programming!"
new_string = ''.join(['0' if char == 'o' else char for char in original_string])
print(new_string)

Ми отримуємо очікуваний вивід:

# Вивід
Pyth0n pr0gramming!

#3. Використання регулярних виразів

Ще один спосіб заміни символів у рядках Python – використання регулярних виразів (regex). Python має вбудований модуль re для операцій з регулярними виразами. За допомогою регулярного виразу ви можете задати шаблон для пошуку, рядок, в якому буде проводитись пошук, і рядок для заміни знайдених шаблонів.

Тут ми використовуємо функцію sub() з модуля re з синтаксисом re.sub(шаблон, заміна, рядок).

import re

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

Шаблон r'o' відповідає всім входженням літери ‘o’ у рядку original_string і замінює їх на ‘0’.

# Вивід
Pyth0n pr0gramming!

Ви можете використовувати регулярні вирази для пошуку більш складних шаблонів. Розглянемо приклад маскування номерів кредитних карток. Припустимо, ми хочемо замінити всі цифри, крім останніх чотирьох, на “X”. Ось як ми можемо це зробити:

import re

def mask_credit_card(card_number):
    # Використовуємо регулярні вирази для пошуку і заміни символів
    masked_number = re.sub(r'\d(?=\d{4})', 'X', card_number)
    return masked_number

# Приклад використання:
credit_card_number = "1234567898765432"
masked_number = mask_credit_card(credit_card_number)
print(masked_number)

І ось результат:

# Вивід
XXXXXXXXXXXX5432

Для простоти прикладу ми не включили дефіс у регулярний вираз, але, за потреби, ви можете змінити приклад.

#4. Використання str.maketrans() та str.translate()

Методи str.maketrans() і str.translate() у Python використовуються для виконання перекладу символів та заміни у рядках.

Як працює str.maketrans().

Метод maketrans() використовується для створення таблиці перекладу, яка визначає, як символи повинні бути замінені у рядку. Ви можете використовувати його з синтаксисом: str.maketrans(x, y). Тут:

  • x — це рядок із символами, які потрібно замінити.
  • y — це рядок, що містить символи, якими потрібно замінити x.

Метод maketrans() генерує таблицю перекладу на основі відповідностей між x та y. Потім ви можете використовувати цю таблицю перекладу з методом str.translate() для виконання фактичної заміни.

Як працює str.translate().

Ви можете використовувати метод str.translate(), щоб застосувати таблицю перекладу, створену за допомогою str.maketrans(), до рядка. Він виконує заміну символів на основі відповідностей, визначених у таблиці перекладу. І повертає новий рядок із застосованими замінами.

Ось як ви можете використовувати метод translate():

new_string = original_string.translate(translation_table)
  • original_string: вхідний рядок, який потрібно змінити.
  • translation_table: таблиця перекладу, створена за допомогою str.maketrans(), яка визначає відповідності символів.

Об’єднавши методи maketrans() і str.translate(), давайте перепишемо наш приклад так:

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

Тут ми створюємо таблицю перекладу за допомогою str.maketrans('o', '0'), щоб вказати, що ‘o’ має бути замінено на ‘0’. Потім ми використовуємо метод translate() для original_string, щоб застосувати цей переклад, що призводить до new_string.

# Вивід
Pyth0n pr0gramming!

Ці методи корисні для таких завдань, як заміна символу та інших маніпуляцій на рівні символів у рядках.

Висновок

Давайте підсумуємо, чого ми навчилися.

Рядки Python є незмінними. Отже, коли ви хочете замінити символ у рядку Python, ви не можете просто перепризначити символ за певним індексом. Ми розглянули наступні підходи для заміни одного або декількох символів у рядку Python:

  • Використовуйте str.replace(old, new), щоб замінити всі екземпляри old новим підрядком.
  • Ви також можете використовувати генератор списку та метод join(). Використовуйте генератор списку для виконання заміни символів, а метод join() для об’єднання списку символів у рядок.
  • Ви можете використовувати зіставлення шаблонів з регулярними виразами, щоб замінити входження символу або шаблону. Використовуйте функцію sub() з re.sub(шаблон, заміна, рядок).
  • Використовуйте str.maketrans(), щоб отримати таблицю перекладу, і метод translate(), щоб застосувати таблицю перекладу до вихідного рядка.

Обов’язково закодуйте кілька прикладів, щоб краще зрозуміти ці техніки. Далі дізнайтеся, як видалити останній символ із рядка Python.