
При работе с текстовыми данными часто возникает задача извлечь числа из строки или разделить их для дальнейших вычислений. В Python эту операцию можно выполнить разными способами: от базового метода split() до регулярных выражений с модулем re. Выбор подхода зависит от структуры строки и требований к обработке данных.
Если числа разделены пробелами или другими предсказуемыми символами, достаточно использовать split() с указанием разделителя. В случае, когда числа перемешаны с буквами или знаками, удобнее применять регулярные выражения, например re.findall(r’\d+’, строка), что позволит получить список всех последовательностей цифр независимо от их расположения.
При разделении важно учитывать формат чисел. Для корректного преобразования строковых значений в числа целесообразно использовать int() или float(). Если строка содержит как целые, так и дробные значения, регулярное выражение можно усложнить, добавив поддержку точки или запятой как десятичного разделителя.
Извлечение чисел из строки с помощью split()
Метод split() удобен, если числа в строке разделены пробелами или другим чётким разделителем. Вызов split() возвращает список подстрок, которые затем можно преобразовать в числа.
Пример: s = "12 45 78". После parts = s.split() получаем ["12", "45", "78"]. Для преобразования: numbers = [int(x) for x in parts]. В результате список [12, 45, 78].
Если используется другой разделитель, его указывают явно: s.split(",") для строки "10,20,30" вернёт ["10", "20", "30"].
Чтобы избежать ошибок при наличии пустых элементов (например, лишних пробелов), полезно добавить фильтрацию: [int(x) for x in s.split() if x].
Разделение строки на числа при помощи регулярных выражений

Для извлечения чисел из строки удобно использовать модуль re. Функция re.findall() позволяет получить список всех совпадений по заданному шаблону.
Пример выделения целых чисел:
import re
s = "Код 123, версия 45, ошибка 6789"
numbers = re.findall(r"\d+", s)
print(numbers) # ['123', '45', '6789']
Регулярное выражение \d+ ищет последовательности цифр. Если нужно получить числа с плавающей точкой или знак перед ними, шаблон можно расширить:
import re
s = "Температура -3.5, скорость 42, значение +7.0"
numbers = re.findall(r"[+-]?\d+(?:\.\d+)?", s)
print(numbers) # ['-3.5', '42', '+7.0']
Чтобы сразу преобразовать найденные строки в числа, удобно использовать генератор:
nums = [float(x) for x in re.findall(r"[+-]?\d+(?:\.\d+)?", s)]
print(nums) # [-3.5, 42.0, 7.0]
Регулярные выражения позволяют гибко настраивать поиск: от выделения только целых чисел до обработки форматов с десятичной точкой и знаком.
Удаление лишних символов перед разбиением строки
Перед тем как выделять числа из строки, важно убрать пробелы, знаки пунктуации и текстовые вставки, которые мешают корректному разбиению. Это позволяет работать только с цифровыми данными и избежать ошибок при преобразовании.
- Использовать метод
str.replace()для удаления фиксированных символов:s = s.replace(",", " "). - Применять
re.sub()для очистки строки от любых нецифровых символов:re.sub(r"[^0-9\s]", "", s). - Удалять повторяющиеся пробелы с помощью
re.sub(r"\s+", " ", s).strip().
Пример:
import re
s = "Числа: 12, 45; и 78!"
cleaned = re.sub(r"[^0-9\s]", " ", s)
cleaned = re.sub(r"\s+", " ", cleaned).strip()
numbers = cleaned.split()
print(numbers) # ['12', '45', '78']
- Сначала убраны все символы, кроме цифр и пробелов.
- Затем последовательности пробелов заменены одним.
- После этого строка разбита на отдельные числа.
Преобразование извлечённых частей строки в целые числа
После разбиения строки на подстроки необходимо преобразовать каждую часть в целое число. Для этого используют функцию int(), применяемую к каждому элементу списка.
Пример:
data = "12 45 7 103"
parts = data.split()
numbers = [int(x) for x in parts]
print(numbers) # [12, 45, 7, 103]
Если в строке встречаются нечисловые значения, преобразование вызовет ошибку. Чтобы избежать остановки программы, стоит использовать обработку исключений или предварительную фильтрацию.
Сравнение способов:
| Метод | Особенности |
|---|---|
int(x) |
Прямое преобразование, работает только для корректных чисел |
Обработка через try-except |
Игнорирование или обработка некорректных значений |
Проверка x.isdigit() |
Пропускает строки, содержащие только цифры без знака и пробелов |
Для строк с возможными символами вроде «-5» или «+8» безопаснее использовать try-except, так как isdigit() вернёт False.
Работа с числами с плавающей точкой при разбиении

Пример:
import re
text = "Температура: 23.5, давление: 1013.25"
floats = re.findall(r"\d+\.\d+", text)
print(floats) # ['23.5', '1013.25']
Если требуется получить не строки, а числовые значения, применяйте map(float, …). Это позволит сразу работать с математическими операциями:
floats = list(map(float, re.findall(r"\d+\.\d+", text)))
При необходимости поддерживать как целые, так и дробные значения используйте расширенное выражение r»\d+(?:\.\d+)?». Оно извлечёт «42» и «42.7» в одном проходе.
Если данные могут содержать числа с запятой («3,14»), предварительно замените запятые на точки функцией str.replace(), иначе преобразование в float завершится ошибкой.
Разделение строки с разными разделителями
Для строк с несколькими видами разделителей стандартный метод split() не подходит, так как он работает только с одним символом. В таких случаях эффективнее использовать модуль re для регулярных выражений.
Пример: строка содержит числа, разделённые запятыми, пробелами и точками с запятой:
data = "12, 7; 45 89,23"
С помощью регулярного выражения можно разделить по любому из указанных символов:
import re
numbers = re.split(r'[,\s;]+', data)
print(numbers) # ['12', '7', '45', '89', '23']
Важно учитывать:
| Ситуация | Рекомендация |
|---|---|
| Пробелы разного количества | Использовать \s+ для группировки любых пробельных символов |
| Разные разделители вместе | Объединять их в квадратные скобки, например [,\s;] |
| Пустые элементы после разделения | Добавить + после группы символов, чтобы удалить пустые строки |
| Конвертация в числа | Использовать map(int, numbers) после разделения |
Для больших строк с многочисленными разделителями регулярные выражения ускоряют обработку и минимизируют ошибки по сравнению с последовательными вызовами split().
Обработка строк с отрицательными числами
При разборе строки с числами, где присутствуют отрицательные значения, стандартный метод split() может работать некорректно, если разделитель не учитывает знак минус. Например, строка "12,-7,34,-2" после split(',') вернёт [’12’, ‘-7′, ’34’, ‘-2’], что корректно для дальнейшего преобразования в числа. Важно сразу применять функцию int() или float() к каждому элементу: [int(x) for x in s.split(',')].
Если числа разделяются пробелами и рядом могут идти минусы без пробелов, стоит использовать регулярные выражения. Шаблон r'-?\d+(\.\d+)?' позволяет извлечь как отрицательные целые, так и дробные числа. Пример: re.findall(r'-?\d+(\.\d+)?', s).
При обработке сложных строк с текстом между числами эффективнее использовать регулярные выражения с учётом границ слов: r'(?. Это исключает ошибочное распознавание минусов внутри слов или идентификаторов.
После извлечения строковых представлений чисел необходимо конвертировать их в нужный тип. Для последовательной обработки целых и дробных значений удобно применять генераторное выражение: numbers = (float(x) for x in re.findall(r'-?\d+(\.\d+)?', s)). Это позволяет работать с большими строками без лишнего копирования данных в список.
Если отрицательные числа могут быть в научной нотации, регулярное выражение стоит расширить: r'-?\d+(\.\d+)?([eE]-?\d+)?'. Такой шаблон корректно извлечёт значения вида -3.5e-2 и 2E3.
При парсинге данных из внешних источников всегда проверяйте корректность знака минуса: иногда используется знак минус Юникода − вместо ASCII -. Для надёжной обработки строк заменяйте все вариации на стандартный минус перед преобразованием.
Сохранение чисел в список для дальнейших вычислений
После извлечения чисел из строки важно сохранить их в структуре, удобной для вычислений. В Python для этого используется список (list), который позволяет хранить последовательность чисел и выполнять над ними арифметические операции.
Пример извлечения чисел и сохранения их в список:
text = "12 45 78 3 9"
numbers = [int(num) for num in text.split()]
Объяснение шагов:
text.split()разбивает строку по пробелам, создавая список строк:['12', '45', '78', '3', '9'].- С помощью list comprehension
[int(num) for num in text.split()]каждая строка преобразуется в целое число. - В результате получаем список чисел:
[12, 45, 78, 3, 9], готовый для вычислений.
Для строк с разделителями, отличными от пробела, можно использовать метод split с аргументом:
text = "12,45,78,3,9"
numbers = [int(num) for num in text.split(',')]
Список чисел можно использовать для:
- Суммирования:
total = sum(numbers) - Нахождения среднего:
average = sum(numbers)/len(numbers) - Применения функций
min()иmax() - Итерации в циклах для сложных вычислений
Если числа могут содержать десятичные значения, замените int() на float():
text = "12.5 3.7 8.9"
numbers = [float(num) for num in text.split()]
Хранение чисел в списке позволяет быстро применять стандартные функции Python и пользовательские вычисления, избегая многократного парсинга строки.
Вопрос-ответ:
Как разделить строку с числами, разделёнными пробелами, на отдельные числа в Python?
В Python можно использовать метод split(), который делит строку на части по указанному разделителю. Если числа разделены пробелами, можно написать так: numbers = "1 2 3 4".split(). Это создаст список строк ['1', '2', '3', '4']. Чтобы получить числа в виде целых, можно применить map(int, numbers), результатом будет [1, 2, 3, 4].
Можно ли разделять числа, если они разделены не пробелами, а запятыми или точками с запятой?
Да, для этого нужно указать разделитель внутри метода split(). Например, если строка выглядит как "1,2,3,4", следует написать numbers = "1,2,3,4".split(","). Для строк с точкой с запятой нужно использовать split(";"). После этого список можно преобразовать в числа с помощью map(int, numbers) или list comprehension.
Как разделить строку с числами и сразу получить их как целые или вещественные значения?
Можно объединить метод split() с функцией map(). Например, строка "1.5 2.7 3.0" делится на части через пробел: numbers = list(map(float, "1.5 2.7 3.0".split())). В результате получится список чисел с плавающей точкой: [1.5, 2.7, 3.0]. Для целых чисел используется int вместо float.
Как разделять числа в строке, если они могут быть разделены разными символами одновременно, например пробелом и запятой?
Для таких случаев удобно использовать модуль re. Например, строка "1, 2 3,4" может быть разделена с помощью регулярного выражения: import re; numbers = list(map(int, re.split('[, ]+', "1, 2 3,4"))). Символы в квадратных скобках указывают, какие разделители использовать. + гарантирует, что последовательность разделителей не создаст пустые элементы.
Как разделить числа в строке, если они разделены пробелами?
В Python можно использовать метод split() для разбиения строки по пробелам. Например, строку "10 20 30" можно разделить так: numbers = "10 20 30".split(). В результате получится список строк ["10", "20", "30"]. Чтобы получить числа, нужно преобразовать каждую строку в целое число: numbers = [int(x) for x in "10 20 30".split()], и получится список [10, 20, 30].
Можно ли разделить числа в строке, если они разделены запятыми или другими символами?
Да, для этого удобен метод split() с указанием разделителя. Например, если есть строка "1,2,3,4", можно использовать numbers = [int(x) for x in "1,2,3,4".split(",")]. В результате получится список [1, 2, 3, 4]. Если разделители разные, например пробел и запятая одновременно, можно применить модуль re и функцию re.split(r"[,\s]+", text), которая разбивает строку по запятым или пробелам, включая случаи, когда разделителей несколько подряд.
