- How can I capitalize the first letter of each word in a string?
- Артём Санников
- Изменение регистра символов в строках Python
- Записи по теме
- Сделать первую букву каждого слова большой (заглавной)
- 1 ответ 1
- Строки в Python и методы работы с ними
- Склеивание и разделение строк
- Форматирование строк в Python
- Поиск в строках
- Замена в строках
- Вывод каждого символа в строке
- Узнаем длину строки
- Преобразование строки в число
- Изменение регистра строк в Python
- Удаление лишних пробелов из строк
- Итог
How can I capitalize the first letter of each word in a string?
The .title() method of a string (either ASCII or Unicode is fine) does this:
>>> "hello world".title() 'Hello World' >>> u"hello world".title() u'Hello World'
However, look out for strings with embedded apostrophes, as noted in the docs.
The algorithm uses a simple language-independent definition of a word as groups of consecutive letters. The definition works in many contexts but it means that apostrophes in contractions and possessives form word boundaries, which may not be the desired result:
>>> "they're bill's friends from the UK".title() "They'Re Bill'S Friends From The Uk"
There is a problem with string.title(). When you use, for example, «e g 3b» , the desired result would be «E G 3b» . However, «e g 3b».title() returns «E G 3B» .
Great answer, and comments highlight that in python not everything behaves the way you need it to, but there’s always convenient ways to make it so. The most convenient way is often importing a purpose-built library, such as python-titlecase
The .title() method can’t work well,
>>> "they're bill's friends from the UK".title() "They'Re Bill'S Friends From The Uk"
import string string.capwords("they're bill's friends from the UK") >>>"They're Bill's Friends From The Uk"
Split the argument into words using str.split(), capitalize each word using str.capitalize(), and join the capitalized words using str.join(). If the optional second argument sep is absent or None, runs of whitespace characters are replaced by a single space and leading and trailing whitespace are removed, otherwise sep is used to split and join the words.
Capwords is still lacking and does not handle something such as «There once was a string with an ‘that had words right after it and then closed'» . With this example all the worlds except for that are capitalized as expected. The results being «There Once Was A String With An ‘that Had Words Right After It And Then Closed'»
Still, this works better than title() for normal situations. In my situation, title() returns a bad output for names with accents or dieresis, while capwords() handled it correctly.
@Chen Houwu, Uk/UK is a perfect counter example. How would one prevent Python from lowercasing existing capital letters using a similar method?
Just because this sort of thing is fun for me, here are two more solutions.
Split into words, initial-cap each word from the split groups, and rejoin. This will change the white space separating the words into a single white space, no matter what it was.
s = 'the brown fox' lst = [word[0].upper() + word[1:] for word in s.split()] s = " ".join(lst)
EDIT: I don’t remember what I was thinking back when I wrote the above code, but there is no need to build an explicit list; we can use a generator expression to do it in lazy fashion. So here is a better solution:
s = 'the brown fox' s = ' '.join(word[0].upper() + word[1:] for word in s.split())
Use a regular expression to match the beginning of the string, or white space separating words, plus a single non-whitespace character; use parentheses to mark «match groups». Write a function that takes a match object, and returns the white space match group unchanged and the non-whitespace character match group in upper case. Then use re.sub() to replace the patterns. This one does not have the punctuation problems of the first solution, nor does it redo the white space like my first solution. This one produces the best result.
import re s = 'the brown fox' def repl_func(m): """process regular expression match groups for word upper-casing problem""" return m.group(1) + m.group(2).upper() s = re.sub("(^|\s)(\S)", repl_func, s) >>> re.sub("(^|\s)(\S)", repl_func, s) "They're Bill's Friends From The UK"
I’m glad I researched this answer. I had no idea that re.sub() could take a function! You can do nontrivial processing inside re.sub() to produce the final result!
Артём Санников
Данная книга является руководством для начинающих специалистов в области анализа и обработки данных. В книге рассматривается язык SQL и его процедурное расширение PL/SQL от компании Oracle.
Изменение регистра символов в строках Python
Одна из простейших операций при работе со строками это — изменение регистра. Сейчас мы рассмотрим три метода, которые позволяют изменять регистр строк:
- title() — каждое слово в строке начинается с заглавной буквы;
- lower() — текст переводится в нижний регистр;
- upper() — текст переводится в верхний регистр;
- swapcase() – переводит символы верхнего регистра в нижний, а нижний в верхний;
- capitalize() – переводит первый символ строки в верхний регистр, а остальные символы в нижний;
Важный момент: в примерах ниже, точка ( . ) в конструкции messages.title() приказывает Python применить методы к переменной messages
# Каждое слово начинается с заглавной буквы messages = "это тестовое сообщение" print(messages.title()) # Переводит символы в нижний регистр messages = "ЭТО ТЕСТОВОЕ СООБЩЕНИЕ" print(messages.lower()) # Переводит символы в верхний регистр messages = "это тестовое сообщение" print(messages.upper()) # Переводит символы верхнего регистра в нижний, а нижнего в верхний messages = "Это Тестовое Сообщение" print(messages.swapcase()) # Переводит первый символ строки в верхний регистр, а все остальные в нижний messages = "ЭТО ТЕСТОВОЕ СООБЩЕНИЕ" print(messages.capitalize())
Записи по теме
Сделать первую букву каждого слова большой (заглавной)
@Grundy если напишете там универсальный ответ, который позволит делать верхний регистр не только после точки, но и после пробела, после переноса строки, табуляции, других пробельных символов, многоточия и любых других символов на усмотрение пользователя — я соглашусь с дубликатом.
@andreymal, если цель добавить «каноничные» ответы на типовые вопросы по python, то думаю имеет смысл использовать метку python-faq.
1 ответ 1
s = 'qwertyu iopasd fghjklz xcvbnm' print(s.title())
Qwertyu Iopasd Fghjklz Xcvbnm
@Alban наверное, потому что элементарные само воросы/ответы — это не лучший способ наполнения базы знаний ruSO.
@alexolut чем это принципиально отличается от этого? Автор вопроса/ответа с каких-то пор стал иметь решающее значение?
Я не минусовал, если хотите знать, но и не поощряю подобных ситуаций. Если вопрос задал новичок, то вполне неплохо дать ему ответ, который его устроит, а не слать его в гугл. Но если Вы даёте самоответ — хорошо бы при этом иметь не чрезмерно тривиальную ситуацию, которая решается одной единственной функцией. А показать, что была произведена какая-то более сложная работа. И тогда она с большей вероятность будет вознаграждена голосами.
@alexolut: голоса на ответе должны отражать только насколько хорошо ответ решает поставленную в вопросе задачу в целом и относительно других ответов в частности. Не имеет значения, кто автор вопроса/ответа. Не имеет значения насколько простая тема по вашему. Если вы считаете, что подобный вопрос неуместен на Stack Overflow голосуйте за закрытие вопроса, минусы на ответы неправильно в таком случае ставить. (я не вижу кстати минуса на ответе). Кстати, не-ascii случай может быть нетривиальным (в зависимости от версии Unicode, используемой вашей версией Питона)
Строки в Python и методы работы с ними
В одной из прошлых статей я разбирал строки в JavaScript. Теперь пришло время поговорить о строках в языке программирования Python.
Начнем с теории. Строка – это последовательность символов произвольной длины. Также строки являются объектами класса str, и если мы захотим получить не строку, а число, то можем использовать функцию приведения.
Склеивание и разделение строк
Самый простой способ склеить строки в Python – это сложить их с помощью знака «+». Рассмотрим на примере:
str = "a"+"b" print(str) # Выведет "ab"
Но такой способ не всегда будет нам подходить. Рассмотрим метод join():
str = ["a", "b", "c"] print("".join(str)) # Выведет "abc"
Перед .join() мы указываем разделитель строк, а в скобках сам их массив.
Для того чтобы разделить строки, используем обратный метод – split(). Тут в скобках указываем набор символов, по которым будет идти разделение, а перед методом не забываем указать имя строки, а после нее поставить точку. Рассмотрим на примере:
str = "a,b,c" print(str.split(",")) # Выведет ['a', 'b', 'c']
Существует и другой способ разделения строк, он называется срез. Срез str[x:y] позволит нам получить строку от символа x до y. При этом необязательно указывать оба параметра, ведь в таком случае срез произойдет от начала или до самого конца строки.
str = "Строки в Python и методы работы с ними" print(str[9:15]) # Выведет "Python"
str = "Строки в Python и методы работы с ними" print(str[:15]) # Выведет "Строки в Python"
str = "Строки в Python и методы работы с ними" print(str[18:]) # Выведет "методы работы с ними"
Также можно срезать каждый энный символ при помощи двойного двоеточия:
str = "123456789" print(str[::2]) # Выведет "13579"
Форматирование строк в Python
Для подстановки в строку любой переменной, которая может являться результатом работы основной части кода, нам понадобятся f-строки. Они появились в Python 3.6, поэтому я рекомендую использовать только свежие версии этого языка программирования. Рассмотрим на примере работу с f-строками:
num = 2*10 num2 = 100 str = f"Первое число: . Второе число: " print(str) # Выведет "Первое число: 20. Второе число: 100"
Поиск в строках
Если нам нужно найти набор символов в начале или в конце данной строки, то на помощь приходят два быстрых метода.
Первый метод – startswith(). Он позволяет искать набор символов в начале строки. Рассмотрим на примере:
str = "Строки в Python и методы работы с ними" print(str.startswith("Строки")) #Выведет True
Второй метод – endswith(). Он позволяет искать набор символов в конце строки. Рассмотрим на примере:
str = ". я разбирал строки в JavaScript" print(str.endswith("JavaScript")) #Выведет True
А если нам нужно найти набор символов в произвольном месте строки, то используем метод find(). Рассмотрим на примере:
str = "Строки в Python и методы работы с ними" print(str.find("Python")) #Выведет 9
В данном случае скрипт нашел набор символов в строке и вывел индекс начала его вхождения в ней.
str = "Строки в Python и методы работы с ними" print(str.find("JavaScript")) #Выведет -1
А в этом случае скрипт не нашел набор символов в строке и вывел «-1».
Замена в строках
Для замены одного набора символов на другой в строке используют метод replace(). Рассмотрим данный метод на примере:
str = "Строки в Python и методы работы с ними" print(str.replace("Python", "JavaScript")) #Выведет "JavaScript"
Вывод каждого символа в строке
Если нам нужно получить и обработать каждый символ в строке отдельно, то мы можем использовать цикл for. Рассмотрим на примере:
str = "123" for i in str: print(i) #Выведет "1" "2" "3"
Узнаем длину строки
Для того чтобы получить длину строки, используем метод len():
str = "123" print(len(str)) # Выведет 3
Преобразование строки в число
Если мы имеем строку, состоящую из набора цифр, то мы смело можем преобразовать ее в число, используя функцию приведения int(). Рассмотрим на примере:
str = "123" print(int(str)) # Выведет 123
Изменение регистра строк в Python
Для того чтобы все буквы в строке были заглавными, используем метод upper():
str = "Строки в Python и методы работы с ними" print(str.upper()) # Выведет "СТРОКИ В PYTHON И МЕТОДЫ РАБОТЫ С НИМИ"
И метод lower() для строчных букв:
str = "СТРОКИ В PYTHON И МЕТОДЫ РАБОТЫ С НИМИ" print(str.upper()) # Выведет "строки в python и методы работы с ними"
Чтобы первая буква в строке стала заглавной, следует использовать метод capitalize():
str = "строки в python и методы работы с ними" print(str.capitalize()) # Выведет "Строки в python и методы работы с ними"
Удаление лишних пробелов из строк
Метод strip() удаляет пробельные символы в начале и в конце строки. lstrip() и rstrip() делают то же самое, но в определенных местах: первый метод в начале строки, а второй – в ее конце.
Итог
Мы разобрали основные методы работы со строками в Python. Предлагайте идеи для статей и удачи в ваших начинаниях!