Как разделить строку на слова
Перейти к содержимому

Как разделить строку на слова

  • автор:

Как в Python разбить строку на символы

3 простых способа, которые можно использовать в работе и пет-проектах.

Иллюстрация: Оля Ежак для Skillbox Media

Дмитрий Зверев

Дмитрий Зверев

Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.

А зачем, собственно, в Python разбивать строки на символы? Например, для того, чтобы проверять правильность пароля и почты клиента, когда он регистрируется в онлайн-сервисе.

Скажем, на нашем сайте есть требование: в пароле должны быть как минимум одна заглавная, одна строчная буква и одна цифра. Мы можем написать скрипт на Python, который проверяет каждый символ и выносит вердикт: верный пароль или нет.

Если вы ещё не знакомы с Python, советуем прочитать нашу статью, в которой мы рассказываем, как быстро и бесплатно изучить этот замечательный язык программирования.

Циклы for и while, или метод «в лоб»

Как работает: проходит по каждому символу в строке и добавляет его в отдельный список.

Самый примитивный способ поделить строку на символы — сделать это с помощью циклов. Выбираем нужные символы из строки и складываем в список.

Выглядит это так:

Генераторы списков — то же, что и for, но короче

Как работает: делает то же самое, что и цикл for, но записывается всего в одну строчку.

password = 'f#da94AAd' symbols = [symbol for symbol in password] print(symbols)
['f', '#', 'd', 'a', '9', '4', 'A', 'A', 'd']

Здесь мы использовали встроенную в Python возможность — list comprehension. Термин сложно перевести на русский, поэтому его называют генератором списков.

Суть простая — это обычный цикл for, который записывается в одну строчку. Чтобы понять, как он работает, перепишем код выше в виде обычного цикла for:

# symbols = [symbol for symbol in password] symbols = [] for symbol in password: symbols += symbol

В короткой записи мы указываем, из какого списка берём элементы — in password, как будем именовать текущий элемент — for symbol, и что делаем с самим элементом — просто сохранять в неизменном виде: symbol.

�� Генераторы списков позволяют записывать длинный цикл for в одну строку. Это полезно, когда не нужно сильно изменять данные, а нужно просто сохранить их.

Функция list — для самых продуктивных

Как работает: делает то же самое, что и циклы for и while, но сокращает количество строк кода.

Когда не хотим писать даже пару строк кода, но разложить строку на символы всё ещё нужно, на помощь приходит функция list. Она превращает набор элементов в список:

password = 'f#da94AAd' symbols = list(password) print(symbols)
['f', '#', 'd', 'a', '9', '4', 'A', 'A', 'd']

Получили такой же результат, но использовали всего одну строку кода. Очень неплохо.

Проверим работу функции проверки пароля:

if check_password(symbols): print('Пароль верный') else: print('Пароль неверный')
'Пароль верный'

�� Функция list — самая лаконичная. Чтобы получить список символов, из которых состоит строка, достаточно просто вызвать функцию со строкой в качестве аргумента.

Что запомнить

Выделим главные тезисы из статьи:

  • использование циклов for и while — это самый простой, но не самый эффективный способ достать из строки все символы;
  • генераторы списков — это удобная и короткая замена цикла for;
  • применение функции list — самый короткий способ разбить строку на символы.

Читайте также:

  • Словари в Python: что нужно знать и как пользоваться
  • «Прошёл модуль курса и начал рассылать резюме»: музыкант, который стал питонистом
  • Создаём первую игру на Python и Pygame

3.7. Java примеры – Разбиение строки на слова и символы в массив и по разделителю

Следующий пример показывает как разделить строку в Java по разделителю с помощью метода split() и вывести подстроку.

public class Example < public static void main(String args[]) < System.out.println("Пример 1:"); String str = "разделить-строку-по-разделителю"; String[] subStr; String delimeter = "-"; // Разделитель subStr = str.split(delimeter); // Разделения строки str с помощью метода split() // Вывод результата на экран for(int i = 0; i < subStr.length; i++) < System.out.println(subStr[i]); >// Ещё один пример разделения System.out.println("\nПример 2:"); str = "разделить.строку.по разделителю"; delimeter = "\\."; // Разделитель subStr = str.split(delimeter); // Вывод результата на экран for(int i = 0; i < subStr.length; i++) < System.out.println(subStr[i]); >// Ещё один пример разделения с использованием порога System.out.println("\nПример 3:"); str = "разделить!строку!по!разделителю"; delimeter = "!"; // Разделитель subStr = str.split(delimeter, 3); // Разбить строку str с порогом равным 3, который означает, как много подстрок, должно быть возвращено. // Вывод результата на экран for(int i = 0; i < subStr.length; i++) < System.out.println(subStr[i]); >> > 

Результат

Получим следующий результат:

Пример 1: разделить строку по разделителю Пример 2: разделить строку по разделителю Пример 3: разделить строку по!разделителю 

Решение 2: разбить строку на слова

Ниже продемонстрирован пример, который позволяет в Java разбить строку на слова.

public class Example < public static void main(String args[]) < String str = "разбить строку на слова"; String[] words = str.split("\\s"); // Разбиение строки на слова с помощью разграничителя (пробел) // Вывод на экран for(String subStr:words) < System.out.println(subStr); >> > 

Результат

Получим следующий результат:

разбить строку на слова 

Решение 3: разбить строку на символы в массив

Следующий пример показывает как разбить строку на массив по символу. Для этого просто преобразуем строку в массив с помощью метода toCharArray().

public class Example < public static void main(String args[]) < String str = "ProgLang"; char[] strToArray = str.toCharArray(); // Преобразуем строку str в массив символов (char) // Вывод массива на экран for(int i = 0; i < strToArray.length; i++) < System.out.print(strToArray[i] + " "); // Для наглядности вставим пробел между индексами >> > 

Результат

Получим следующий результат:

P r o g L a n g 

Оглавление

  • 1. Java примеры – Использование кода на практике
  • 2. Java примеры – Окружающая среда
  • 2.1. Java примеры – Скомпилировать файл
  • 2.2. Java примеры – Установить путь к нескольким классам
  • 2.3. Java примеры – Отладка java-файла
  • 2.4. Java примеры – Установить путь к классу
  • 2.5. Java примеры – Просмотреть текущий путь класса
  • 2.6. Java примеры – Установить назначение файла класса
  • 2.7. Java примеры – Запустить скомпилированный java-файл класса
  • 2.8. Java примеры – Узнать версию Java
  • 2.9. Java примеры – Установить путь к классу в .jar-файле или .zip-файле
  • 3. Java примеры – Строки
  • 3.1. Java примеры – Сравнить две строки
  • 3.2. Java примеры – Найти последнее вхождение подстроки внутри подстроки
  • 3.3. Java примеры – Удалить нужный символ из строки
  • 3.4. Java примеры – Заменить символ в строке
  • 3.5. Java примеры – Вывод в обратном порядке
  • 3.6. Java примеры – Нахождение символа или слова в строке
  • 3.7. Java примеры – Разбиение строки на слова и символы
  • 3.8. Java примеры – Преобразование строки в верхний регистр
  • 3.9. Java примеры – Найти слово в строке
  • 3.10. Java примеры – Сравнить производительность создания строки
  • 3.11. Java примеры – Оптимизировать создание строк
  • 3.12. Java примеры – Форматирование строк
  • 3.13. Java примеры – Конкатенация строк
  • 3.14. Java примеры – Определить код Юникода символа в строке
  • 3.15. Java примеры – Буферизация строк
  • 4. Java примеры – Массивы
  • 4.1. Java примеры – Сортировка массива и поиск элемента
  • 4.2. Java примеры – Метод сортировки массива, вставить элемент в массив
  • 4.3. Java примеры – Размер двумерного массива
  • 4.4. Java примеры – Обратный порядок массива, переворачиваем массив
  • 4.5. Java примеры – Как выводить массивы и двумерные массивы в консоль
  • 4.6. Java примеры – Найти максимальный и минимальный элемент массива
  • 4.7. Java примеры – Соединить два массива в один
  • 4.8. Java примеры – Как заполнить массив числами
  • 4.9. Java примеры – Увеличить массив после инициализации
  • 4.10. Java примеры – Сравнение двух массивов
  • 4.11. Java примеры – Удаление элемента из массива
  • 4.12. Java примеры – Удаление массива из другого массива
  • 4.13. Java примеры – Одинаковые элементы массивов
  • 4.14. Java примеры – Поиск в массиве
  • 4.15. Java примеры – Равенство двух массивов
  • 4.16. Java примеры – Сравнить массивы
  • 5. Java примеры – Дата и время
  • 5.1. Java примеры – Форматирование времени в формате AM-PM
  • 5.2. Java примеры – Получение названия и номера текущего месяца
  • 5.3. Java примеры – Получить текущее время в часах и минутах
  • 5.4. Java примеры – Вывести текущее время и дату
  • 5.5. Java примеры – Вывести текущее время в 24-часовом формате
  • 5.6. Java примеры – Получить текущий месяц
  • 5.7. Java примеры – Получить текущие секунды
  • 5.8. Java примеры – Получить короткое название месяца
  • 5.9. Java примеры – Получить день недели
  • 5.10. Java примеры – Добавление времени к дате
  • 5.11. Java примеры – Отображение времени в формате другой страны
  • 5.12. Java примеры – Отображение времени на разных языках
  • 5.13. Java примеры – Прокрутить часы и месяцы
  • 5.14. Java примеры – Получить номер недели и месяц в году
  • 5.15. Java примеры – Форматы текущей даты
  • 6. Java примеры – Методы
  • 6.1. Java примеры – Перезагрузка методов
  • 6.2. Java примеры – Вывод массива с использованием метода
  • 6.3. Java примеры – Решение Ханойской башни
  • 6.4. Java примеры – Последовательность чисел Фибоначчи
  • 6.5. Java примеры – Вычисление факториала числа
  • 6.6. Java примеры – Переопределение метода
  • 6.7. Java примеры – Вывод массива с использованием метода
  • 6.8. Java примеры – Использование оператора break
  • 6.9. Java примеры – Использование оператора continue
  • 6.10. Java примеры – Использование метки в методе
  • 6.11. Java примеры – Использование операторов enum и switch
  • 6.12. Java примеры – Использование конструктора enum

Извлечение подстрок из строки

В этой статье рассматриваются различные методы извлечения частей строки.

  • Используйте метод Split, если нужные подстроки разделены символом-разделителем (или символами).
  • Регулярные выражения удобно использовать, когда строка соответствует фиксированному шаблону.
  • Используйте сочетание методов IndexOf и Substring, если не хотите извлекать все подстроки из строки.

Метод String.Split

String.Split предоставляет несколько перегрузок, которые позволяют разбить строку на группу подстрок, основанных на одном или нескольких указанных символах-разделителях. Вы можете ограничить общее число подстрок в окончательном результате, обрезав пробелы в подстроках или исключив пустые подстроки.

Ниже показаны три различные перегрузки String.Split() . Первый пример вызывает перегрузку Split(Char[]) без передачи знаков разделения. Если не указать символы-разделители, String.Split() будет использовать для разделения строки разделители по умолчанию, которые являются пробелами.

string s = "You win some. You lose some."; string[] subs = s.Split(); foreach (string sub in subs) < Console.WriteLine($"Substring: "); > // This example produces the following output: // // Substring: You // Substring: win // Substring: some. // Substring: You // Substring: lose // Substring: some. 
Dim s As String = "You win some. You lose some." Dim subs As String() = s.Split() For Each substring As String In subs Console.WriteLine("Substring: ", substring) Next ' This example produces the following output: ' ' Substring: You ' Substring: win ' Substring: some. ' Substring: You ' Substring: lose ' Substring: some. 

Как видите, символы-точки ( . ) содержатся в двух подстроках. Если вы хотите исключить символы-точки, добавьте символ-точку как дополнительный символ разделителя. В следующем примере показано, как это сделать.

string s = "You win some. You lose some."; string[] subs = s.Split(' ', '.'); foreach (string sub in subs) < Console.WriteLine($"Substring: "); > // This example produces the following output: // // Substring: You // Substring: win // Substring: some // Substring: // Substring: You // Substring: lose // Substring: some // Substring: 
Dim s As String = "You win some. You lose some." Dim subs As String() = s.Split(" "c, "."c) For Each substring As String In subs Console.WriteLine("Substring: ", substring) Next ' This example produces the following output: ' ' Substring: You ' Substring: win ' Substring: some ' Substring: ' Substring: You ' Substring: lose ' Substring: some ' Substring: 

Точки исчезли из подстрок, однако теперь появились две дополнительные пустые подстроки. Пустые подстроки представляют подстроку между словом и точкой после него. Чтобы исключить из результирующего массива пустые подстроки, вызовите перегрузку Split(Char[], StringSplitOptions) и укажите StringSplitOptions.RemoveEmptyEntries для параметра options .

string s = "You win some. You lose some."; char[] separators = new char[] < ' ', '.' >; string[] subs = s.Split(separators, StringSplitOptions.RemoveEmptyEntries); foreach (string sub in subs) < Console.WriteLine($"Substring: "); > // This example produces the following output: // // Substring: You // Substring: win // Substring: some // Substring: You // Substring: lose // Substring: some 
Dim s As String = "You win some. You lose some." Dim separators As Char() = New Char() Dim subs As String() = s.Split(separators, StringSplitOptions.RemoveEmptyEntries) For Each substring As String In subs Console.WriteLine("Substring: ", substring) Next ' This example produces the following output: ' ' Substring: You ' Substring: win ' Substring: some ' Substring: You ' Substring: lose ' Substring: some 

Регулярные выражения

Если строка соответствует фиксированному шаблону, используйте регулярное выражение для извлечения и обработки ее элементов. Например, если строки принимают форму «числооперанда чисел «, можно использовать регулярное выражение для извлечения и обработки элементов строки. Ниже приведен пример:

String[] expressions = < "16 + 21", "31 * 3", "28 / 3", "42 - 18", "12 * 7", "2, 4, 6, 8" >; String pattern = @"(\d+)\s+([-+*/])\s+(\d+)"; foreach (string expression in expressions) < foreach (System.Text.RegularExpressions.Match m in System.Text.RegularExpressions.Regex.Matches(expression, pattern)) < int value1 = Int32.Parse(m.Groups[1].Value); int value2 = Int32.Parse(m.Groups[3].Value); switch (m.Groups[2].Value) < case "+": Console.WriteLine("= ", m.Value, value1 + value2); break; case "-": Console.WriteLine(" = ", m.Value, value1 - value2); break; case "*": Console.WriteLine(" = ", m.Value, value1 * value2); break; case "/": Console.WriteLine(" = ", m.Value, value1 / value2); break; > > > // The example displays the following output: // 16 + 21 = 37 // 31 * 3 = 93 // 28 / 3 = 9.33 // 42 - 18 = 24 // 12 * 7 = 84 
Dim expressions() As String = Dim pattern As String = "(\d+)\s+([-+*/])\s+(\d+)" For Each expression In expressions For Each m As Match In Regex.Matches(expression, pattern) Dim value1 As Integer = Int32.Parse(m.Groups(1).Value) Dim value2 As Integer = Int32.Parse(m.Groups(3).Value) Select Case m.Groups(2).Value Case "+" Console.WriteLine(" = ", m.Value, value1 + value2) Case "-" Console.WriteLine(" = ", m.Value, value1 - value2) Case "*" Console.WriteLine(" = ", m.Value, value1 * value2) Case "/" Console.WriteLine(" = ", m.Value, value1 / value2) End Select Next Next ' The example displays the following output: ' 16 + 21 = 37 ' 31 * 3 = 93 ' 28 / 3 = 9.33 ' 42 - 18 = 24 ' 12 * 7 = 84 

Шаблон регулярного выражения (\d+)\s+([-+*/])\s+(\d+) определяется следующим образом:

Шаблон Описание
(\d+) Совпадение с одной или несколькими десятичными цифрами. Это первая группа записи.
\s+ Совпадение с одним или несколькими пробелами.
([-+*/]) Совпадение со знаком арифметического оператора (+, -, *, или /). Это вторая группа записи.
\s+ Совпадение с одним или несколькими пробелами.
(\d+) Совпадение с одной или несколькими десятичными цифрами. Это третья группа записи.

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

  • Один или несколько символов-разделителей не всегда служат разделителями в экземпляре String.
  • Последовательность и количество символов-разделителей являются изменяемыми или неизвестными.

Например, метод Split нельзя использовать для разделения следующей строки, поскольку число символов \n (новая строка) является изменяемым и они не всегда являются разделителями.

[This is captured\ntext.]\n\n[\n[This is more captured text.]\n] \n[Some more captured text:\n Option1\n Option2][Terse text.] 

Регулярное выражение может легко разделить эту строку, как показано ниже.

String input = "[This is captured\ntext.]\n\n[\n" + "[This is more captured text.]\n]\n" + "[Some more captured text:\n Option1" + "\n Option2][Terse text.]"; String pattern = @"\[([^\[\]]+)\]"; int ctr = 0; foreach (System.Text.RegularExpressions.Match m in System.Text.RegularExpressions.Regex.Matches(input, pattern)) < Console.WriteLine(": ", ++ctr, m.Groups[1].Value); > // The example displays the following output: // 1: This is captured // text. // 2: This is more captured text. // 3: Some more captured text: // Option1 // Option2 // 4: Terse text. 
Dim input As String = String.Format("[This is capturedtext.]" + "[[This is more " + "captured text.]" + "[Some more captured text:" + " Option1" + " Option2][Terse text.]", vbCrLf) Dim pattern As String = "\[([^\[\]]+)\]" Dim ctr As Integer = 0 For Each m As Match In Regex.Matches(input, pattern) ctr += 1 Console.WriteLine(": ", ctr, m.Groups(1).Value) Next ' The example displays the following output: ' 1: This is captured ' text. ' 2: This is more captured text. ' 3: Some more captured text: ' Option1 ' Option2 ' 4: Terse text. 

Шаблон регулярного выражения \[([^\[\]]+)\] определяется следующим образом:

Шаблон Описание
\[ Совпадение с открывающей скобой.
([^\[\]]+) Совпадение с любым символом, который не является открывающей или закрывающей скобкой, один или несколько раз. Это первая группа записи.
\] Совпадение с закрывающей скобкой.

Метод Regex.Split практически идентичен методу String.Split, за исключением того, что он разделяет строку на основе шаблона регулярного выражения, а не фиксированной кодировки. Например, в следующем примере метод Regex.Split используется для разделения строки, которая содержит подстроки, разделенные с помощью различных сочетаний дефисов и других символов.

String input = "abacus -- alabaster - * - atrium -+- " + "any -*- actual - + - armoire - - alarm"; String pattern = @"\s-\s?[+*]?\s?-\s"; String[] elements = System.Text.RegularExpressions.Regex.Split(input, pattern); foreach (string element in elements) Console.WriteLine(element); // The example displays the following output: // abacus // alabaster // atrium // any // actual // armoire // alarm 
Dim input As String = "abacus -- alabaster - * - atrium -+- " + "any -*- actual - + - armoire - - alarm" Dim pattern As String = "\s-\s?[+*]?\s?-\s" Dim elements() As String = Regex.Split(input, pattern) For Each element In elements Console.WriteLine(element) Next ' The example displays the following output: ' abacus ' alabaster ' atrium ' any ' actual ' armoire ' alarm 

Шаблон регулярного выражения \s-\s?[+*]?\s?-\s определяется следующим образом:

Шаблон Описание
\s- Совпадение с пробелом, за которым следует дефис.
\s? Совпадение с нулем или одним символом пробела.
[+*]? Совпадение с нулем или единичное появление символа + или *.
\s? Совпадение с нулем или одним символом пробела.
-\s Совпадение с дефисом, за которым следует пробел.

Методы String.IndexOf и String.Substring

Если вам нужны все подстроки в строке, можете использовать один из методов сравнения строк, которые возвращают индекс начала сопоставления. Затем для извлечения нужных подстрок можно будет вызвать метод Substring. К методам сравнения строк можно отнести:

  • IndexOf, возвращающий отсчитываемый от нуля индекс первого появления символа или строки в экземпляре строки.
  • IndexOfAny, возвращающий отсчитываемый от нуля индекс в текущем экземпляре строки первого появления любого символа в массиве символов.
  • LastIndexOf, возвращающий отсчитываемый от нуля индекс последнего появления символа или строки в экземпляре строки.
  • LastIndexOfAny, возвращающий отсчитываемый от нуля индекс в текущем экземпляре строки последнего вхождения любого символа в массиве символов.

В следующем примере метод IndexOf используется для поиска точек в строке. После чего в нем используется метод Substring для возврата полных предложений.

String s = "This is the first sentence in a string. " + "More sentences will follow. For example, " + "this is the third sentence. This is the " + "fourth. And this is the fifth and final " + "sentence."; var sentences = new List(); int start = 0; int position; // Extract sentences from the string. do < position = s.IndexOf('.', start); if (position >= 0) < sentences.Add(s.Substring(start, position - start + 1).Trim()); start = position + 1; >> while (position > 0); // Display the sentences. foreach (var sentence in sentences) Console.WriteLine(sentence); // The example displays the following output: // This is the first sentence in a string. // More sentences will follow. // For example, this is the third sentence. // This is the fourth. // And this is the fifth and final sentence. 
 Dim input As String = "This is the first sentence in a string. " + "More sentences will follow. For example, " + "this is the third sentence. This is the " + "fourth. And this is the fifth and final " + "sentence." Dim sentences As New List(Of String) Dim start As Integer = 0 Dim position As Integer ' Extract sentences from the string. Do position = input.IndexOf("."c, start) If position >= 0 Then sentences.Add(input.Substring(start, position - start + 1).Trim()) start = position + 1 End If Loop While position > 0 ' Display the sentences. For Each sentence In sentences Console.WriteLine(sentence) Next End Sub ' The example displays the following output: ' This is the first sentence in a string. ' More sentences will follow. ' For example, this is the third sentence. ' This is the fourth. ' And this is the fifth and final sentence. 

См. также

  • Базовые операции со строками в .NET
  • Регулярные выражения .NET
  • Анализ строк с помощью String.Split в C#

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Разделение строки на список слов в Python

Часто при работе с текстовыми данными стоит задача разделить строку на отдельные слова. Например, есть строка «Привет, мир! Это мой первый код на Python». Цель — преобразовать эту строку в список, где каждое слово будет отдельным элементом: [«Привет,», «мир!», «Это», «мой», «первый», «код», «на», «Python»].

В языке программирования Python для разделения строки на слова используется встроенный метод split() . Он разделяет строку на подстроки на основе указанного разделителя. Если разделитель не указан, метод split() разделяет строку по пробелам.

Вот простой пример использования метода split() :

text = "Привет, мир! Это мой первый код на Python" words = text.split() print(words)

После выполнения этого кода будет выведен следующий результат:

['Привет,', 'мир!', 'Это', 'мой', 'первый', 'код', 'на', 'Python']

Важно отметить, что разделители (в данном случае пробелы) не включаются в полученный список.

Таким образом, метод split() позволяет легко и быстро разделить строку на отдельные слова и сохранить их в списке для дальнейшей обработки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *