Преобразование регистра символов: примеры и инструкции
Изменение регистра строк в 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 defPython 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() позволяют проверить регистр символов строки.
Расширенные примеры изменения регистра
Ниже приведены неочевидные случаи, требующие особого подхода.
Пример 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)) # 'ехал грека через реку'
ехал грека через реку