Имея \ г, как плод ваш сепаратор делает неудобным печатать вещи; поэтому для целей этого ответа я собираюсь использовать символ @ на своем месте. Следующий код работает одинаково, если вы присваиваете переменной \ r моей разделительной переменной и используете вашу фактическую разделенную строку для fruit_str.
Некоторые объяснения следует за кодом.
import re
def updateFruitQuantity(the_fruit, the_quantity, fruit_str, separator):
re_1 = r"(" + the_fruit + r")(:.*?|)" + separator
re_2 = r'\1:' + str(the_quantity) + separator
fruit_str = re.sub(re_1, re_2, fruit_str)
return(fruit_str)
separator = "@"
fruit_str = "@[email protected]@[email protected]"
print(fruit_str)
fruit_str = updateFruitQuantity("Pineapples", 25, fruit_str, separator)
print(fruit_str)
fruit_str = updateFruitQuantity("Bananas", 17, fruit_str, separator)
print(fruit_str)
fruit_str = updateFruitQuantity("Pineapples", 3, fruit_str, separator)
print(fruit_str)
fruit_str = updateFruitQuantity("Apples", 94, fruit_str, separator)
print(fruit_str)
fruit_str = updateFruitQuantity("Apples", 102, fruit_str, separator)
print(fruit_str)
А вот выход Кодекса:
@[email protected]@[email protected]
@[email protected]@Pineapples:[email protected]
@[email protected]:[email protected]:[email protected]
@[email protected]:[email protected]:[email protected]
@Apples:[email protected]:[email protected]:[email protected]
@Apples:[email protected]:[email protected]:[email protected]
Я строй отдельных регулярных выражений для целевого текста и текст замены.
Эти целевые выражения предполагают, что каждое количество фруктов: количество сопровождается разделителем. В целевом выражении есть две группы захвата - каждая из них окружена скобками. Вторая группировка важна в целевом выражении, поскольку она подбирает любой элемент количества, который может присутствовать.
Заменное выражение начинается с \ 1, который обозначает текст, сопоставляемый первой группировкой в целевом выражении (например, «Яблоки»). Затем следует двоеточие, а затем строка количества, которая будет использоваться. Выполнение этого способа гарантирует, что любое существующее: количество должным образом заменяется новым количеством и что оно также работает в случае, когда не было существующего количества. Так, например, в нашем третьем изменении вы увидите, что количество ананасов возвращается с 25 до 3.
Вам понадобится еще один механизм добавления новых фруктов в fruit_str по прошествии времени.