2011-04-27 49 views
1

是否有可能在Python中使用正則表達式來做這樣的事情?Python,上下文敏感的字符串替換

增量每一個字符是字符串中的某個號碼1

所以輸入「123ab5」將成爲「234ab6」

我知道我可以遍歷字符串和手動增加每個字符,如果它是一個數字,但這似乎unpythonic。

注意。這不是功課。我已將問題簡化到聽起來像家庭作業的水平。

+4

「9」會發生什麼? – eumiro 2011-04-27 08:58:42

+0

這是功課嗎? – muhuk 2011-04-27 08:59:12

+0

@eumiro包裝爲零我猜,沒想到那個 – Mike 2011-04-27 09:04:19

回答

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('', '1234567890')) 

在任何這些情況中:

# b == "234ab6" 

EDIT - 前兩個地圖910,最後一個包裝到0。爲了總結前兩到零,你將有str((int(x) + 1) % 10)

+0

+1使用'translate'和'maketrans' – 2011-04-27 09:07:14

1

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

+0

ops,同樣的解決方案..我認爲你比我快 – nkint 2011-04-27 09:12:25

0
>>> 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)我的解決方案