1

正規表現を使用してPythonでこのようなことを行うことは可能ですか?

文字列内の数値であるすべての文字を 1 ずつ増やします

したがって、入力「123ab5」は「234ab6」になります。

文字列を反復処理して、数値の場合は各文字を手動でインクリメントできることはわかっていますが、これはPythonのようには見えません。

ノート。これは宿題ではありません。宿題の練習のように聞こえるレベルまで問題を単純化しました。

4

3 に答える 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"

編集- 最初の 2 つは a にマップ9され10、最後の 1 つは にラップされ0ます。最初の 2 つをゼロにラップするには、次のように置き換える必要がありますstr(int(x) + 1)str((int(x) + 1) % 10)

于 2011-04-27T09:00:22.923 に答える
1

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

于 2011-04-27T09:10:12.260 に答える
0
>>> 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的なソリューションです。

于 2011-04-27T09:11:51.453 に答える