Python,上下文敏感的字符串替换
-
22-10-2019 - |
题
是否可以使用正则表达式在Python中进行类似的事情?
递增字符串中数字的每个字符1
因此输入“ 123ab5”将成为“ 234ab6”
我知道我可以在字符串上迭代并手动增加每个字符的数字,但这似乎是不庞然大话的。
笔记。这不是作业。我将问题简化为听起来像作业的水平。
解决方案
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
到 10
, ,最后一个包裹 0
. 。要将前两个包裹为零,您必须替换 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 Catch Eumiro解决方案也是我的Pythonic解决方案。
不隶属于 StackOverflow