Умножать только числовые значения в строке Python

#python #python-3.x

#python #python-3.x

Вопрос:

Я заинтересован в умножении всех чисел в строке Python на переменную (y), как в следующем примере, где y = 10.

 Initial Input: 
"I have 15, 7, and 350 cars, boats and bikes, respectively, in my parking lot."
  
 Desired Output: 
"I have 150, 70, and 3500 cars, boats and bikes, respectively, in my parking lot."
  

Я попробовал следующий код Python, но не получаю желаемого результата. Как я могу создать желаемый результат в коде Python?

 string_init = "I have 15, 7, and 350 cars, boats and bikes, respectively, in my parking lot."

string_split = string.split()
y = 10 
multiply_string = string * (y)
print(multiply_string)
  

Ответ №1:

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

Пример:

 import re

s =  "I have 15, 7, and 350 cars, boats and bikes, respectively, in my parking lot."
y = 10
print(re.sub(r"(d )", lambda x: str(int(x.group())*y), s))
#or 
# print(re.sub(r"(d )", lambda x: f"{int(x.group())*y}", s))
  

Вывод:

 I have 150, 70, and 3500 cars, boats and bikes, respectively, in my parking lot.
  

Комментарии:

1. Мне нравится этот ответ, потому что его можно довольно легко адаптировать и для обработки десятичных дробей.

2. Что именно означает приведенное выше регулярное выражение и как оно работает? Учитывает ли это различные типы знаков препинания, нечисловые символы и т.д.?

3. (d ) находит целые числа в строке. А затем оно умножается на требуемое число

Ответ №2:

Вы можете использовать регулярное выражение:

 import re
print(re.sub("(d )", "g<1>0", string_init))
  

это должно выводить:

 I have 150, 70, and 3500 cars, boats and bikes, respectively, in my parking lot.
  

Комментарии:

1. Что именно означает приведенное выше регулярное выражение и как оно работает? Учитывает ли это различные типы знаков препинания, нечисловые символы и т.д.?