【问题标题】:Python replace year mentions like '85 with 1985Python 用 1985 替换像 '85 这样的年份
【发布时间】:2015-02-05 16:15:55
【问题描述】:

我正在使用这个正则表达式将字符串中所有出现的年份 '85 替换为 1985

import re
re.sub("'(\d\d)", "19\1", "Today '45")

但我得到的结果却远非预期:

'Today 19\x01'

我希望得到Today 1945。我想知道什么是正确的方法。非常感谢任何帮助。

【问题讨论】:

  • r为前缀制作字符串原始字符串:re.sub(r"'(\d\d)", r"19\1", "Today '45")

标签: python regex regex-group


【解决方案1】:

使字符串成为原始字符串

>>> re.sub(r"'(\d\d)", r"19\1", "Today '45")
'Today 1945'

或者正如Avinash 建议的那样,使用字边界\b。它们更好,因为它们可以帮助您忽略不是两位数的数字,例如 3456

>>> re.sub(r"'(\d{2})\b", r"19\1", "Today '45, '3456")
"Today 1945, '3456"

【讨论】:

  • @AvinashRaj 谢谢...已编辑
  • @AvinashRaj:但撇号不应该在后向断言中,否则不会被删除。
  • 哦,我没注意到.. '(?=\d{2}\b)'(\d{2})\b
【解决方案2】:

使用\g<1> 而不是\1 引用组:

In [21]: re.sub("'(\d\d)", "19\g<1>", "Today '45")
Out[21]: 'Today 1945'

或使用原始字符串:

In [22]: re.sub("'(\d\d)", r"19\1", "Today '45")
Out[22]: 'Today 1945'

你的代码不工作,因为 Python interprets \1 as a character.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2014-01-21
    • 2020-10-25
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多