Способы замены чисел в строке на Python

Раздел: Основы Python -> Строковые операции

Основной подход: замена чисел с помощью регулярных выражений

Наиболее универсальный и гибкий способ замены чисел в строке в Python - использование модуля re и функции re.sub(). Этот метод подходит для замены всех чисел, независимо от их формата (целые, дробные, отрицательные).

import re
text = "Температура 23 градуса, давление 1013.25 гПа"
result = re.sub(r'\d+\.?\d*', 'XXX', text)
print(result)

заменить текст python (замена подстроки в строке в python)

Температура XXX градуса, давление XXX гПа

Python заменить число (замена числа в python (например, в строке))

Пояснение: регулярное выражение \d+\.?\d* находит одно или более цифр (\d+), за которыми может следовать точка (\.?) и ещё несколько цифр (\d*). Таким образом, заменяются как целые, так и дробные числа. Если точка есть, но после неё нет цифр, число всё равно будет найдено. Для замены только целых чисел можно использовать \d+.

Типичные проблемы

  • Выражение \d+\.?\d* может захватить часть строки, например, "23." (с точкой в конце) - это не всегда желательно. Используйте более точный шаблон для дробных чисел: \d+(\.\d+)?.
  • Для отрицательных чисел добавьте необязательный минус: -?\d+(\.\d+)?.
  • При наличии чисел в составе слов (например, "abc123") регулярное выражение заменит только цифровую часть. Чтобы избежать замены букв, можно использовать границы слов \b.

Как заменить конкретное число в строке, если известно его точное значение?

text = "Код 404 и статус 404 ошибка"
result = text.replace('404', '000')
print(result)

Python часть текста (извлечение подстроки из строки в python)

Код 000 и статус 000 ошибка

Print split python (использование split с print в python)

Метод str.replace() заменяет все вхождения точной строки. Число указывается как строка. Если нужно заменить только первое вхождение, используйте третий аргумент: text.replace('404', '000', 1).

Проблема: если число является частью другого числа (например, "1404" содержит "404"), замена произойдёт и в нём. Для точной замены целого числа лучше использовать регулярное выражение с границами слова:

import re
text = "Код 404 и 1404"
result = re.sub(r'\b404\b', '000', text)
print(result)

код пробела python (код символа пробела в python)

Код 000 и 1404

Python количество пробелов (количество пробелов в строке python)

Как заменить все цифры на звёздочки или другие символы?

import re
text = "Пароль: 1234, код: 567"
result = re.sub(r'\d', '*', text)
print(result)

количество символов в тексте python (подсчет количества символов в строке python)

Пароль: ****, код: ***

Python найти строку (поиск подстроки в строке python)

Здесь \d соответствует каждой отдельной цифре. Замена происходит по одной цифре. Если нужно заменить целые числа целиком (например, "1234" заменить на "****"), используйте \d+.

Как заменить числа с плавающей точкой?

import re
text = "Значение PI=3.14159, e=2.71828"
result = re.sub(r'\d+\.\d+', 'FLOAT', text)
print(result)

Python пробелы (пробелы в python)

Значение PI=FLOAT, e=FLOAT

символ пробел python (символ пробела в python)

Шаблон \d+\.\d+ требует, чтобы после точки была хотя бы одна цифра. Если число может быть целым или дробным, используйте \d+(\.\d+)?.

Как заменить отрицательные числа?

import re
text = "Температура -5, а вчера было 10"
result = re.sub(r'-?\d+', 'NUM', text)
print(result)

Python первое число в строке (извлечение первого числа из строки в python)

Температура NUM, а вчера было NUM

Python лишние пробелы (удаление лишних пробелов в python)

Обратите внимание: шаблон -?\d+ захватит минус и цифры, но если в строке есть тире, не являющееся минусом (например, дефис), оно тоже может быть захвачено. Уточните контекст.

Как заменить числа, но оставить некоторые (например, номера телефонов)?

Можно использовать сложное регулярное выражение с негативным просмотром вперёд/назад. Например, заменить все числа, кроме тех, что начинаются с '+7':

import re
text = "Телефон: +71234567890, код: 123"
pattern = r'(?# Это упрощённый пример. Для точного номера телефона нужен более строгий шаблон.
result = re.sub(pattern, 'HIDDEN', text)
print(result)

Python длина строки (длина строки в python)

Телефон: +7HIDDEN, код: HIDDEN

Применение границ \b и просмотров требует аккуратности. Возможны ошибки с пересечением шаблонов.

Как заменить числа с помощью translate или list comprehension?

Для замены каждой цифры на символ можно использовать str.maketrans и translate:

text = "123-456-7890"
trans_table = str.maketrans('0123456789', '**********')
result = text.translate(trans_table)
print(result)
***-***-****

Но этот метод заменяет только одну цифру на один символ, не объединяя последовательности. Для замены целых чисел на одно значение (например, "123" на "X") translate не подходит.

Альтернатива с list comprehension:

text = "a1b2c3"
result = ''.join('X' if c.isdigit() else c for c in text)
print(result)
aXbXcX

Также замена по одной цифре. Для замены целых чисел потребуется группировка цифр. Можно использовать itertools.groupby, но это сложнее.

Расширенные примеры замены чисел в строке

Пример 1: замена целых чисел, исключая числа внутри слов

Пример
import re
text = "abc123, 456def, 789, ghi0"
pattern = r'\b\d+\b'
result = re.sub(pattern, 'NUM', text)
print(result)
abc123, 456def, NUM, ghi0

Пояснение: граница слова \b требует, чтобы цифры были отделены от букв нецифровыми символами. "abc123" и "456def" содержат цифры, примыкающие к буквам без разделителя, поэтому они не заменяются.

Пример 2: замена чисел с европейским десятичным разделителем (запятая)

Пример
import re
text = "Цена 12,50 евро, количество 3"
pattern = r'\d+,\d+'
result = re.sub(pattern, 'PRICE', text)
print(result)
Цена PRICE евро, количество 3

Чтобы заменить и целые числа, и числа с запятой, используйте \d+([.,]\d+)?.

Пример 3: замена чисел в CSV строке (только поля, содержащие числа)

Пример
import re
csv_line = "Иван,30,Москва,180.5"
# Заменим второе поле (возраст) и четвёртое (рост) на '***'
parts = csv_line.split(',')
parts[1] = re.sub(r'\d+', '***', parts[1])
parts[3] = re.sub(r'\d+\.?\d*', '***', parts[3])
masked = ','.join(parts)
print(masked)
Иван,***,Москва,***

При работе с CSV важно учитывать возможные кавычки и экранирование.

Пример 4: замена чисел, которые являются номерами кредитных карт (16 цифр, сгруппированы по 4)

Пример
import re
text = "Карта: 1234 5678 9012 3456, срок: 12/24"
pattern = r'\b\d{4} \d{4} \d{4} \d{4}\b'
result = re.sub(pattern, '**** **** **** ****', text)
print(result)
Карта: **** **** **** ****, срок: 12/24

Это частный случай. Для более сложных форматов (с дефисами, разной длиной) шаблон нужно адаптировать.

Пример 5: замена чисел с контекстом (заменить все числа, кроме тех, что следуют за словом "код")

Пример
import re
text = "Код 123, пароль 456, код 789"
# Негативный просмотр назад: число не должно быть после слова 'код'
pattern = r'(?result = re.sub(pattern, '***', text, count=0, flags=re.IGNORECASE)
print(result)
Код 123, пароль ***, код 789

Обратите внимание: просмотр назад фиксированной длины. Если между 'код' и числом может быть пробел, табуляция и т.д., шаблон усложняется. Возможна проблема с регистром (использован флаг IGNORECASE).

Пример 6: замена чисел с использованием re.sub с функцией замены

Пример
import re
text = "Числа: 10, 20, 30"
def replacer(match):
num = int(match.group())
return str(num * 2)
result = re.sub(r'\d+', replacer, text)
print(result)
Числа: 20, 40, 60

Функция позволяет выполнять любые преобразования (математические, форматирование, проверки).

Пример 7: замена чисел с плавающей точкой на округлённые значения

Пример
import re
text = "Значения: 3.14159, 2.71828"
def rounder(match):
return f"{float(match.group()):.2f}"
result = re.sub(r'\d+\.\d+', rounder, text)
print(result)
Значения: 3.14, 2.72

Пример 8: замена чисел в строке с помощью метода subn (получение количества замен)

Пример
import re
text = "a1b2c3"
new_text, count = re.subn(r'\d', 'X', text)
print(f"Результат: {new_text}, замен: {count}")
Результат: aXbXcX, замен: 3

Замена числа в Python (например, в строке) - comments

En
Python заменить число (python)