是否有可能在Python中使用正則表達式來做這樣的事情?Python,上下文敏感的字符串替換
增量每一個字符是字符串中的某個號碼1
所以輸入「123ab5」將成爲「234ab6」
我知道我可以遍歷字符串和手動增加每個字符,如果它是一個數字,但這似乎unpythonic。
注意。這不是功課。我已將問題簡化到聽起來像家庭作業的水平。
是否有可能在Python中使用正則表達式來做這樣的事情?Python,上下文敏感的字符串替換
增量每一個字符是字符串中的某個號碼1
所以輸入「123ab5」將成爲「234ab6」
我知道我可以遍歷字符串和手動增加每個字符,如果它是一個數字,但這似乎unpythonic。
注意。這不是功課。我已將問題簡化到聽起來像家庭作業的水平。
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('', '1234567890'))
在任何這些情況中:
# b == "234ab6"
EDIT - 前兩個地圖9
到10
,最後一個包裝到0
。爲了總結前兩到零,你將有str((int(x) + 1) % 10)
+1使用'translate'和'maketrans' – 2011-04-27 09:07:14
>>> test = '123ab5'
>>> def f(x):
try:
return str(int(x)+1)
except ValueError:
return x
>>> ''.join(map(f,test))
'234ab6'
ops,同樣的解決方案..我認爲你比我快 – nkint 2011-04-27 09:12:25
>>> a = "123ab5"
>>> def foo(n):
... try: n = int(n)+1
... except ValueError: pass
... return str(n)
...
>>> a = ''.join(map(foo, a))
>>> a
'234ab6'
的方式用一個簡單的,如果還是與加盟+地圖是更Python的try-catch eumiro解決方案來替換str(int(x) + 1)
我的解決方案
「9」會發生什麼? – eumiro 2011-04-27 08:58:42
這是功課嗎? – muhuk 2011-04-27 08:59:12
@eumiro包裝爲零我猜,沒想到那個 – Mike 2011-04-27 09:04:19