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"

编辑-前两个映射9到 a 10,最后一个将其包装到0. 要将前两个包装为零,您必须替换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'

顺便说一下,使用简单的 if 或使用 join+map 的 try-catch eumiro 解决方案对我来说也是更 Pythonic 的解决方案

于 2011-04-27T09:11:51.453 回答