如何在没有前导零的情况下更换年份,使用Python重新排序前导零?

时间:2012-01-30 11:10:55

标签: python regex

我有一个包含日期字符串的字符串'363898,Catullus,84-11-1 BC' 如何使用Python re?

将0084替换为0084

2 个答案:

答案 0 :(得分:3)

尝试:

import re
re.sub(r',(\d\d)-', r',00\1-', '363898, Catullus,84-11-1 BC')

使用r',(\d\d)-',我们捕获逗号和短划线之间的任何数字对(不少于或多于)。我们用逗号,两个零替换整个匹配,无论是第一对括号(这里是两个数字)和破折号之间的任何内容。

这意味着:

  • 如果昏迷和短划线之间没有两位数字,则不进行替换。你找回原来的字符串
  • 如果有这些数字,则会自行替换,由相同的逗号和短划线包围,但附加零。

在Python中尝试使用正则表达式时,只需使用online regular expression tester完全免责声明:我对此进行了编码,因此我有偏见。

但也许正则表达式不适合这项工作。有时很好地使用普通函数也是如此:

In [10]: entry = '363898,Catullus,84-11-1 BC'.split(',')
In [11]: numbers = entry[-1].split('-')
In [12]: numbers = '-'.join([numbers[0].zfill(4)] + numbers[1:])
In [13]: entry = entry = ','.join(entry[:-1] + [numbers])
In [14]: entry
Out[14]: '363898,Catullus,0084-11-1 BC'

答案 1 :(得分:1)

re.sub(r"(?=\b\d{2}-\d+-\d)", "00", '363898,Catullus,84-11-1 BC')

只会修改年份,如果它们只包含两位数字。你需要另一个

re.sub(r"(?=\b\d-\d+-\d)", "000", '361234,Caesar,8-12-4 BC')

也处理一位数的年份。我会留下三位数的年份作为练习:)