Перейти к содержимому

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

  • автор:

Разбить строку на две ровные части

Считаем длину строки. В первую часть берем элементы с первого до длина/2, во вторую с длина/2 до последнего:

text = "where's my car dude?" l = len(text) + 1 part_1 = text[0:l//2] part_2 = text[l//2:] print (part_1) print (part_2) 

(добавляем единицу, чтобы в случае нечетного количества символов в первой части было на один символ больше. Если единицу не добавлять, то на один символ больше будет во второй части)

where's my car dude? 

Нечетное количество символов:

where's my car dude 

String.prototype.split()

Метод split() разбивает объект String на массив строк путём разделения строки указанной подстрокой.

Синтаксис

str.split([separator[, limit]])

Параметры

Необязательный параметр. Указывает символы, используемые в качестве разделителя внутри строки. Параметр separator может быть как строкой, так и регулярным выражением. Если параметр опущен, возвращённый массив будет содержать один элемент со всей строкой. Если параметр равен пустой строке, строка str будет преобразована в массив символов.

Необязательный параметр. Целое число, определяющее ограничение на количество найденных подстрок. Метод split() всё равно разделяет строку на каждом сопоставлении с разделителем separator , но обрезает возвращаемый массив так, чтобы он содержал не более limit элементов.

Описание

Метод split() возвращает новый массив.

Если разделитель separator найден, он удаляется из строки, а подстроки возвращаются в массиве. Если разделитель опущен, массив будет содержать только один элемент, состоящий из всей строки. Если разделитель является пустой строкой, строка str будет преобразована в массив символов.

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

Примечание: Если строка является пустой строкой, метод split() вернёт массив, состоящий из одной пустой строки, а не пустой массив.

Примеры

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

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

function splitString(stringToSplit, separator)  var arrayOfStrings = stringToSplit.split(separator); console.log('Оригинальная строка: "' + stringToSplit + '"'); console.log('Разделитель: "' + separator + '"'); console.log( "Массив содержит " + arrayOfStrings.length + " элементов: " + arrayOfStrings.join(" / "), ); > // Строчка из «Бури» Шекспира. Перевод Михаила Донского. var tempestString = "И как хорош тот новый мир, где есть такие люди!"; var monthString = "Янв,Фев,Мар,Апр,Май,Июн,Июл,Авг,Сен,Окт,Ноя,Дек"; var space = " "; var comma = ","; splitString(tempestString, space); splitString(tempestString); splitString(monthString, comma); 

Пример сгенерирует следующий вывод:

Оригинальная строка: "И как хорош тот новый мир, где есть такие люди!" Разделитель: " " Массив содержит 10 элементов: И / как / хорош / тот / новый / мир, / где / есть / такие / люди! Оригинальная строка: "И как хорош тот новый мир, где есть такие люди!" Разделитель: "undefined" Массив содержит 1 элементов: И как хорош тот новый мир, где есть такие люди! Оригинальная строка: "Янв,Фев,Мар,Апр,Май,Июн,Июл,Авг,Сен,Окт,Ноя,Дек" Разделитель: "," Массив содержит 12 элементов: Янв / Фев / Мар / Апр / Май / Июн / Июл / Авг / Сен / Окт / Ноя / Дек

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

В следующем примере метод split() ищет 0 или более пробелов, за которыми следует точка с запятой, за которой снова следуют 0 или более пробелов, и, если этот шаблон найден, удаляет пробелы из строки. Переменная nameList является массивом, возвращённым в результате работы метода split() .

var names = "Гарри Трамп ;Фрэд Барни; Хелен Ригби ; Билл Абель ;Крис Ханд "; console.log(names); var re = /\s*;\s*/; var nameList = names.split(re); console.log(nameList); 

Пример напечатает две строки; на первой строке напечатана оригинальная строчка, а на второй — получившийся массив.

Гарри Трамп ;Фред Барни; Хелен Ригби ; Билл Абель ;Крис Ханд Гарри Трамп,Фред Барни,Хелен Ригби,Билл Абель,Крис Ханд

Пример: возврат ограниченного числа подстрок

В следующем примере метод split() ищет 0 или более пробелов в строке и возвращает первые три найденных подстроки.

var myString = "Привет, мир. Как дела?"; var splits = myString.split(" ", 3); console.log(splits); 

Вывод скрипта будет следующим:

,,мир.,Как 

Пример: захват подгрупп

Если параметр separator содержит подгруппы, сопоставившиеся результаты также будут присутствовать в возвращённом массиве.

var myString = "Привет 1 мир. Предложение номер 2."; var splits = myString.split(/(\d)/); console.log(splits); 

Вывод скрипта будет следующим:

,1, мир. Предложение номер ,2,. 

Пример: обращение строки при помощи метода split()

var str = "фывапролд"; var strReverse = str.split("").reverse().join(""); // 'длорпавыф' // split() возвращает массив, к которому применяются методы reverse() и join() 

Бонус: используя оператор === (en-US), можно проверить, являлась ли строка палиндромом.

Спецификации

Specification
ECMAScript Language Specification
# sec-string.prototype.split

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

  • String.prototype.charAt()
  • String.prototype.indexOf()
  • String.prototype.lastIndexOf()
  • Array.prototype.join()

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 7 авг. 2023 г. by MDN contributors.

Your blueprint for a better internet.

MDN

Support

  • Product help
  • Report an issue

Our communities

Developers

  • Web Technologies
  • Learn Web Development
  • MDN Plus
  • Hacks Blog
  • Website Privacy Notice
  • Cookies
  • Legal
  • Community Participation Guidelines

Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2024 by individual mozilla.org contributors. Content available under a Creative Commons license.

Строковые методы split() и join() в Python

При работе со строками в Python вам может потребоваться разбить строку на подстроки или, наоборот, объединить несколько мелких кусочков в одну большую строку. В этой статье мы рассмотрим методы split() и join(), которые как раз и используются для разделения и объединения строк. Мы на примерах разберем, как они помогают легко выполнять необходимые нам задачи.

Важно отметить, что поскольку строки в Python неизменяемы, вы можете вызывать для них методы, не изменяя исходные строки. Итак, давайте начнем!

Метод split()

Когда вам нужно разбить строку на подстроки, вы можете использовать метод split().

Метод split() принимает строку и возвращает список подстрок. Синтаксис данного метода выглядит следующим образом:

Здесь – любая допустимая строка в Python, а sep – это разделитель, по которому вы хотите разделить исходную строку. Его следует указывать в виде строки.

Например, если вы хотите разделить по запятым, нужно установить sep = «,» .

sep – необязательный аргумент. По умолчанию метод split() разбивает строки по пробелам.

maxsplit – еще один опциональный аргумент, указывающий, сколько раз вы хотите разделить исходную строку . По умолчанию maxsplit имеет значение -1. При таком значении метод разбивает строку по всем вхождениям параметра sep.

Если вы хотите разделить исходную строку на две части, по первому вхождению запятой, вы можете установить maxsplit = 1 . Так вы получите две подстроки: части исходной строки до и после первой запятой.

Таким образом, при одном разрезе строки вы получаете 2 подстроки. При двух разрезах — 3 подстроки. то есть, разрезая строку k раз, вы получите k+1 фрагментов.

Давайте рассмотрим несколько примеров, чтобы увидеть метод split() в действии.

Примеры использования метода split() в Python

Зададим строку my_string , как это показанного ниже. После этого вызовем метод split() для my_string без аргументов sep и maxsplit .

my_string = "I code for 2 hours everyday" my_string.split() # ['I', 'code', 'for', '2', 'hours', 'everyday']

Вы можете видеть, что my_string разделена по всем пробелам. Метод возвращает список подстрок.

Рассмотрим следующий пример. Здесь my_string содержит названия фруктов, разделенные запятыми.

Давайте разделим my_string по запятым. Для этого нужно установить sep = «,» или просто передать в метод «,» при вызове.

my_string = "Apples,Oranges,Pears,Bananas,Berries" my_string.split(",") # ['Apples', 'Oranges', 'Pears', 'Bananas', 'Berries']

Как и ожидалось, метод split() вернул список фруктов, где каждый фрукт из my_string стал элементом списка.

Теперь давайте воспользуемся необязательным аргументом maxsplit и установив его равным 2.

my_string.split(",", 2) # ['Apples', 'Oranges', 'Pears,Bananas,Berries']

Попробуем разобрать получившийся список.

Напомним, что my_string = «Apples,Oranges,Pears,Bananas,Berries» , и мы решили разделить эту строку по запятым «,» .

Первая запятая стоит после Apples , и после первого разделения у нас будет две подстроки: Apples и Oranges,Pears,Bananas,Berries .

Вторая запятая стоит после Oranges . Таким образом, после второго деления у нас будет уже три подстроки: Apples , Oranges и Pears,Bananas,Berries .

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

Надеюсь, теперь вы понимаете, как работает метод split() и для чего нужны аргументы sep и maxsplit .

Метод join()

Теперь, когда вы знаете, как разбить строку на подстроки, пора научиться использовать метод join() для формирования строки из подстрок.

Синтаксис метода Python join() следующий:

Здесь – любой итерируемый объект Python, содержащий подстроки. Это может быть, например, список или кортеж. – это разделитель, с помощью которого вы хотите объединить подстроки.

По сути, метод join() объединяет все элементы в , используя в качестве разделителя.

А теперь пора примеров!

Примеры использования метода join() в Python

В предыдущем разделе мы разбивали строку my_string по запятым и получали в итоге список подстрок. Назовем этот список my_list .

Теперь давайте сформируем строку, объединив элементы этого списка при помощи метода join(). Все элементы в my_list – это названия фруктов.

my_list = my_string.split(",") # после разделения my_string мы получаем my_list: # ['Apples', 'Oranges', 'Pears', 'Bananas', 'Berries']

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

Чтобы объединить элементы в my_list с использованием запятой в качестве разделителя, используйте «,» а не просто , . Это показано во фрагменте кода ниже.

", ".join(my_list) # Output: Apples, Oranges, Pears, Bananas, Berries

Здесь элементы my_list объединяются в одну строку с помощью запятых, за которыми следуют пробелы.

Разделитель может быть любым.

Давайте для примера используем в качестве разделителя 3 символа подчеркивания ___ .

"___".join(my_list) # Output: Apples___Oranges___Pears___Bananas___Berries

Элементы в my_list теперь объединены в одну строку и отделены друг от друга тремя подчеркиваниями ___ .

Теперь вы знаете, как сформировать одну строку из нескольких подстрок с помощью метода join().

Заключение

Итак, мы рассмотрели строковые методы split() и join(). Из этой статьи вы узнали следующее:

  • .split (sep, maxsplit) разбивает исходную строку по вхождениям разделителя sep , maxsplit раз.
  • .join() объединяет подстроки в итерируемый объект , используя в качестве разделителя.

Надеюсь, вам была полезна данная статья. Успехов в написании кода!

Более 50 задач на строки в нашем телеграм канале Python Turbo. Уютное сообщество Python разработчиков.

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

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

  • Используйте метод 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, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

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

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