【问题标题】:Python, context sensitive string substitutionPython,上下文敏感的字符串替换
【发布时间】:2011-04-27 08:56:45
【问题描述】:

是否可以在 Python 中使用正则表达式做类似的事情?

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

所以输入“123ab5”会变成“234ab6”

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

注意。这不是家庭作业。我已将我的问题简化到听起来像是家庭作业的程度。

【问题讨论】:

  • 9 会发生什么?
  • @eumiro 我猜想归零,没想到

标签: python regex string-substitution


【解决方案1】:
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"

EDIT - 前两个将9 映射到10,最后一个将其包装到0。要将前两个包装为零,您必须将 str(int(x) + 1) 替换为 str((int(x) + 1) % 10)

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • ops,同样的解决方案..我认为你比我快
    【解决方案3】:
    >>> 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 解决方案对我来说也是更 Python 的解决方案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-31
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多