Python, контекстно-зависимая подстановка строк

1

Можно ли сделать что-то подобное в Python с помощью регулярных выражений?

Приращение каждого символа, который является числом в строке, на 1

Таким образом, ввод "123ab5" станет "234ab6"

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

примечание. Это не домашнее задание. Я упростил свою проблему до уровня, который звучит как домашнее задание.

  • 4
    Что происходит с 9 ?
  • 0
    это домашняя работа?
Показать ещё 1 комментарий
Теги:
string-substitution

3 ответа

5
Лучший ответ
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)

  • 0
    +1 за использование translate и maketrans
1

>>> test = '123ab5'
>>> def f(x):
        try:
            return str(int(x)+1)
        except ValueError:
            return x
 >>> ''.join(map(f,test))
     '234ab6'

код >

  • 0
    опс, то же решение .. я думаю, что ты был быстрее, чем я
0
>>> 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 является тем более питоническим решением для меня тоже

Ещё вопросы

Сообщество Overcoder
Наверх
Меню