簡體   English   中英

如何使用Python re用前導零替換沒有前導零的年份?

[英]How to replace years without leading zeros, with leading zeros using Python re?

我有一個包含日期字符串的字符串'363898,Catullus,84-11-1 BC'如何使用Python re將84年替換為0084?

嘗試:

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

使用r',(\\d\\d)-'我們可以捕獲介於逗號和破折號之間的任意一對數字(不少於或多於)。 我們將整個匹配項替換為逗號,兩個零(在第一對括號中為零)(在此處為兩位數)和破折號。

它的意思是:

  • 如果逗號和破折號之間沒有兩位數,則不進行替換。 您取回原始字符串
  • 如果有這些數字,則由它們自己替換,並用相同的逗號和破折號包圍,但帶有附加的零。

在Python中嘗試正則表達式時,只需使用在線正則表達式測試儀即可。完全免責聲明:我對此代碼進行了編碼,因此有偏見。

但是也許正則表達式不是最適合這份工作的。 有時候,很好地使用普通函數也是如此:

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'
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')

還可以處理一位數的年份。 我將保留三位數的年份作為練習:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM