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

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

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

Однак під час роботи з рядками ви можете маніпулювати рядками — видаляти пробіли на початку та в кінці, змінювати великі літери, замінювати символ іншим тощо.

Отже, як ми маніпулюємо рядками Python? І як нам замінити символ у рядку 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'

Скажімо, ви хочете замінити літеру «о» на цифру «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-адресами чи шляхами до файлів вам може знадобитися замінити певні символи, щоб переконатися, що вони правильно відформатовані та сумісні з веб-браузерами чи файловими системами.
  Як додати людей і компанії до контактів на Mac

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

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

Розглянемо той самий приклад заміни «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.

# Output
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.

# Output
Pyth0n pr0gramming!

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

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

  Надсилайте програми з Chrome для встановлення на вашому iPhone

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

  • Ми можемо використовувати розуміння списку для повторення кожного символу в original_string. Якщо символ «о», ми замінюємо його на «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) 

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

# Output
Pyth0n pr0gramming!

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

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

Тут ми використовуємо функцію 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’ в оригінальний_рядок і замінює їх на ‘0’.

# Output
Pyth0n pr0gramming!

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

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)

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

# Output
XXXXXXXXXXXX5432

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

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

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

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

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

  • x — це рядок із символами, які потрібно замінити.
  • y — це рядок, що містить символи, якими потрібно замінити x.
  Пояснення щодо мережевого сховища (NAS) за 5 хвилин або менше

Метод 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.

# Output
Pyth0n pr0gramming!

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

Висновок

Давайте повторимо, що ми навчилися.

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

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

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