Преобразование регистра символов: примеры и инструкции

Раздел: Строки -> Строки

Изменение регистра строк в Python

Наиболее часто используемые методы для преобразования регистра - str.lower() и str.upper(). Они переводят все символы строки в нижний или верхний регистр соответственно.

text = "Hello, World!"
print(text.lower())  # hello, world!
print(text.upper())  # HELLO, WORLD!

Python strip (метод strip в python)

hello, world!
HELLO, WORLD!

Python повторить строку (повторение строки в python)

Эти методы работают быстро и корректно обрабатывают символы Unicode, включая кириллицу, немецкие умляуты и др. Случаи использования: стандартизация ввода пользователя, сравнение строк без учета регистра (совместно с casefold), подготовка данных для хранения.

Как сделать первую букву строки заглавной, а остальные строчными?

Метод str.capitalize() приводит первый символ к верхнему регистру, все остальные - к нижнему.

text = "python Programming"
print(text.capitalize())  # Python programming

Tuple в str python (преобразование кортежа в строку в python)

Python programming

Python объект в строку (преобразование объекта в строку в python)

Проблема: если строка начинается с цифры или специального символа, capitalize не изменит регистр других символов? На самом деле метод все равно переводит все последующие символы в нижний регистр, независимо от первого символа. Ошибки не возникает, но результат может быть неожиданным для строк, где первый символ не буква.

text = "123abc DEF"
print(text.capitalize())  # 123abc def

Python convert string (преобразование строк в python)

123abc def

Python str to bytes (преобразование строки в байты в python)

Как сделать заглавными первые буквы каждого слова?

Метод str.title() преобразует первую букву каждого слова в заглавную, остальные - в строчные.

text = "hello world from python"
print(text.title())  # Hello World From Python

функция разделить python (разделение строки на список в python)

Hello World From Python

вывести символ строки python (вывод символа строки в python)

Проблемы: title() некорректно работает с апострофами и некоторыми сокращениями. Например, слово "don't" превращается в "Don'T". Для исправления применяется регулярное выражение или функция string.capwords() из модуля string.

import string
text = "i don't know"
print(text.title())  # I Don'T Know
print(string.capwords(text))  # I Don't Know

вывести длину строки python (вывести длину строки в python)

I Don'T Know
I Don't Know

вывести элемент строки python (вывод конкретного символа строки по индексу в python)

Как инвертировать регистр каждого символа?

Метод str.swapcase() меняет заглавные буквы на строчные и наоборот.

text = "Hello, World! 123"
print(text.swapcase())  # hELLO, wORLD! 123

задания на строки python (задания на строки в python)

hELLO, wORLD! 123

замена символов python (замена символов в строке python)

Метод корректно обрабатывает Unicode, но для некоторых символов (например, немецкого ß) результат может быть неочевидным: ß в верхнем регистре - SS, поэтому swapcase() преобразует ß в SS, а при обратном вызове SS станет ss, а не ß. Цифры и знаки препинания не изменяются.

Как выполнить сравнение строк без учета регистра с правильной обработкой Unicode?

Метод str.casefold() выполняет более агрессивное приведение к нижнему регистру, чем lower(), и предназначен для сравнения строк без учета регистра в разных языках.

text1 = "Straße"
text2 = "STRASSE"
print(text1.casefold() == text2.casefold())  # True
print(text1.lower() == text2.lower())  # False (строчная ß не равна ss)

Python первое слово в строке (извлечение первого слова из строки в python)

True
False

Проблемы: casefold() не подходит для вывода (может удалить различия, важные для отображения). Используется только для сравнения. Для турецкого языка требуется специальная обработка: буква I в верхнем регистре становится ı (i без точки), а İ (i с точкой) - i. Стандартные методы Python не учитывают турецкую локаль, поэтому для полной поддержки нужно использовать модуль locale или сторонние библиотеки.

Дополнительный вариант: метод str.isupper(), str.islower() позволяют проверить регистр символов строки.

- Python номера символов (номера (индексы) символов в строке python)
- Python новая строка (использование символа новой строки в python)
- Python строки find (метод find для строк)

Расширенные примеры изменения регистра

Ниже приведены неочевидные случаи, требующие особого подхода.

Пример 1. Сравнение с учётом Unicode через casefold

Пример
# Немецкое слово 'Maß' (мера) и его верхний регистр 'MASS'
word1 = 'Maß'
word2 = 'MASS'
print("lower:", word1.lower() == word2.lower())  # False
print("casefold:", word1.casefold() == word2.casefold())  # True

# Греческая буква Σ и ς (сигма в конце слова)
greek1 = 'Σ'  # заглавная сигма
greek2 = 'ς'  # строчная конечная сигма
print("lower:", greek1.lower() == greek2.lower())  # False (в Python 3.12+ может быть True)
print("casefold:", greek1.casefold() == greek2.casefold())  # True
lower: False
casefold: True
lower: True
casefold: True

Пример 2. Обработка апострофов с помощью regex

Пример
import re
text = "he's my friend, i can't do it"
# Функция title() с регулярным выражением, учитывающим апостроф
def smart_title(s):
    return re.sub(r"\b(\w)(\w*)\b", lambda m: m.group(1).upper() + m.group(2).lower(), s)

print("title:", text.title())
print("smart_title:", smart_title(text))
title: He'S My Friend, I Can'T Do It
smart_title: He's My Friend, I Can't Do It

Пример 3. Проблема турецкой буквы I

Пример
# Стандартный lower() не различает I с точкой и без
text_en = 'Istanbul'
text_tr = 'İstanbul'  # турецкая İ с точкой
print("lower EN:", text_en.lower())  # istanbul
print("lower TR:", text_tr.lower())  # i̇stanbul (с точкой над i)
# Для корректного преобразования используется locale
import locale
locale.setlocale(locale.LC_ALL, 'tr_TR.UTF-8')  # только если локаль установлена
# print(text_tr.lower())  # может дать 'ıstanbul' - зависит от системы
lower EN: istanbul
lower TR: i̇stanbul

Пример 4. swapcase с немецким ß

Пример
text = 'Weiß, groß'
print("swapcase:", text.swapcase())  # WEIẞ, GROSS (ß -> ẞ? на самом деле ß -> SS? проверим)
swapcase: wEIẞ, GROSS

В Python 3.12+ swapcase для ß возвращает ẞ (заглавная буква ß), а не SS. Это улучшение Unicode.

Пример 5. capitalize для строк с пробелами в начале

Пример
text = '   python'
print(repr(text.capitalize()))  # '   python' (пробелы не обрезаются)
# Если нужно убрать лишние пробелы, сначала применяется strip()
text_clean = text.strip().capitalize()
print(repr(text_clean))  # 'Python'
'   python'
'Python'

Пример 6. Использование translate для произвольного отображения

Пример
# Допустим, нужно перевести все заглавные русские буквы в строчные, но 'Е' и 'Ё' оставить
import string
table = str.maketrans('АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ',
                      'абвгдeёжзийклмнопрстуфхцчшщъыьэюя')
text = 'Ехал Грека через реку'
print(text.translate(table))  # 'ехал грека через реку'
ехал грека через реку

Изменение регистра строк в Python - comments

En
Python регистр (python)