Frage

Ist es möglich, in Python so etwas mit regelmäßigen Ausdrücken so etwas zu tun?

Inkrementieren Sie jedes Zeichen, das eine Zahl in einer Zeichenfolge um 1 ist

Eingabe "123ab5" würde also "234AB6" werden

Ich weiß, ich könnte über die Saite iterieren und jeden Charakter manuell erhöht, wenn es sich um eine Zahl handelt, aber dies scheint unpythonisch zu sein.

Hinweis. Dies sind keine Hausaufgaben. Ich habe mein Problem bis zu einem Niveau vereinfacht, das wie eine Hausaufgabenübung klingt.

War es hilfreich?

Lösung

a = "123ab5"

b = ''.join(map(lambda x: str(int(x) + 1) if x.isdigit() else x, a))

oder:

b = ''.join(str(int(x) + 1) if x.isdigit() else x for x in a)

oder:

import string
b = a.translate(string.maketrans('0123456789', '1234567890'))

In einem dieser Fälle:

# b == "234ab6"

BEARBEITEN - Die ersten beiden Karte 9 zu einem 10, der letzte umhüllt es 0. Um die ersten beiden in Null einzuwickeln, müssen Sie ersetzen str(int(x) + 1) mit str((int(x) + 1) % 10)

Andere Tipps

>>> 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'

Übrigens mit einem einfachen If oder mit Versuch-Catch eumiro-Lösung mit Join+Map ist die pythonischere Lösung auch für mich

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top