正規表現を使用してPythonでこのようなことを行うことは可能ですか?
文字列内の数値であるすべての文字を 1 ずつ増やします
したがって、入力「123ab5」は「234ab6」になります。
文字列を反復処理して、数値の場合は各文字を手動でインクリメントできることはわかっていますが、これはPythonのようには見えません。
ノート。これは宿題ではありません。宿題の練習のように聞こえるレベルまで問題を単純化しました。
正規表現を使用してPythonでこのようなことを行うことは可能ですか?
文字列内の数値であるすべての文字を 1 ずつ増やします
したがって、入力「123ab5」は「234ab6」になります。
文字列を反復処理して、数値の場合は各文字を手動でインクリメントできることはわかっていますが、これはPythonのようには見えません。
ノート。これは宿題ではありません。宿題の練習のように聞こえるレベルまで問題を単純化しました。
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"
編集- 最初の 2 つは a にマップ9
され10
、最後の 1 つは にラップされ0
ます。最初の 2 つをゼロにラップするには、次のように置き換える必要がありますstr(int(x) + 1)
。str((int(x) + 1) % 10)
>>> 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'
ちなみに、join +mapを使用した単純なifまたはtry-catcheumiroソリューションは、私にとってもよりPython的なソリューションです。