Можно ли сделать что-то подобное в Python с помощью регулярных выражений?
Приращение каждого символа, который является числом в строке, на 1
Таким образом, ввод "123ab5" станет "234ab6"
Я знаю, что я мог бы перебирать строку и вручную увеличивать каждый символ, если это число, но это кажется нерегулярным.
примечание. Это не домашнее задание. Я упростил свою проблему до уровня, который звучит как домашнее задание.
a = "123ab5"
b = ''.join(map(lambda x: str(int(x) + 1) if x.isdigit() else x, a))
или:
b = ''.join(str(int(x) + 1) if x.isdigit() else x for x in a)
или
import string
b = a.translate(string.maketrans('0123456789', '1234567890'))
В любом из этих случаев:
# b == "234ab6"
РЕДАКТИРОВАТЬ - первые две карты 9
до 10
, последний - в 0
. Чтобы перенести первые два на нуль, вам нужно заменить str(int(x) + 1)
на str((int(x) + 1) % 10)
translate
и maketrans
>>> test = '123ab5'
>>> def f(x):
try:
return str(int(x)+1)
except ValueError:
return x
>>> ''.join(map(f,test))
'234ab6'
код >
>>> a = "123ab5"
>>> def foo(n):
... try: n = int(n)+1
... except ValueError: pass
... return str(n)
...
>>> a = ''.join(map(foo, a))
>>> a
'234ab6'
кстати с простым if или с try-catch решением eumiro с соединением + map является тем более питоническим решением для меня тоже
9
?