Python,上下文相关的字符串替换

发布于 2024-11-03 07:25:30 字数 216 浏览 3 评论 0原文

是否可以使用正则表达式在Python中执行类似的操作?

将字符串中的每个数字字符加 1

所以输入“123ab5”将变为“234ab6”

我知道我可以迭代字符串并手动增加每个字符(如果它是数字),但这似乎不符合Python标准。

笔记。这不是家庭作业。我已经将我的问题简化到听起来像家庭作业的水平。

Is it possible to do something like this in Python using regular expressions?

Increment every character that is a number in a string by 1

So input "123ab5" would become "234ab6"

I know I could iterate over the string and manually increment each character if it's a number, but this seems unpythonic.

note. This is not homework. I've simplified my problem down to a level that sounds like a homework exercise.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

流绪微梦 2024-11-10 07:25:30
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)

a = "123ab5"

b = ''.join(map(lambda x: str(int(x) + 1) if x.isdigit() else x, a))

or:

b = ''.join(str(int(x) + 1) if x.isdigit() else x for x in a)

or:

import string
b = a.translate(string.maketrans('0123456789', '1234567890'))

In any of these cases:

# b == "234ab6"

EDIT - the first two map 9 to a 10, the last one wraps it to 0. To wrap the first two into zero, you will have to replace str(int(x) + 1) with str((int(x) + 1) % 10)

眼藏柔 2024-11-10 07:25:30

<代码>

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

<代码>

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

清秋悲枫 2024-11-10 07:25:30
>>> 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 的解决方案

>>> a = "123ab5"
>>> def foo(n):
...     try: n = int(n)+1
...     except ValueError: pass
...     return str(n)
... 
>>> a = ''.join(map(foo, a))
>>> a
'234ab6'

by the way with a simple if or with try-catch eumiro solution with join+map is the more pythonic solution for me too

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文