我有一個字符串包含日期字符串,'363898,Catullus,84-11-1 BC' 我怎樣才能用0084替換84年使用Python re?如何在沒有前導零的情況下替換多年,前導零使用Python嗎?
回答
嘗試:
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'
非常感謝你們,對於使用單個數字的年份還需要進行哪些修改,如8-11-1到0008-11-1這樣的四位數字? – Sravan 2012-01-30 12:03:44
使用非正則表達式版本,無需修改。這纔是重點。使用正則表達式版本,您可以輕鬆找到它:(\ d \ d)表示兩位數字。 \ d代表一位數字。在替代模式中,\ 1表示括號內的任何內容,其餘是不變的。在我給你的正則表達式測試中發揮價值,你會找到自己的方式。 – 2012-01-30 12:44:36
@Tim Pietzcker:感謝您的編輯。多年的練習,但我的英語仍然很糟糕。我被一個德國人糾正了--D – 2012-01-30 12:47:53
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')
也處理一位數年。我會離開三位數的年作爲一個練習:)
- 1. 替換前導零
- 2. 如何在適用的情況下添加前導零?
- 3. 用空格替換前導零
- 4. 如何有前導零
- 5. PHP - 如何獲得沒有前導零的年份?
- 6. Python - MYSQL - 選擇前導零
- 7. 如何在Linux中用空格替換前導零?
- 8. 處理多個前導零
- 9. 如何創建前導零?
- 10. 如何刪除前導零?
- 11. 前導零週期
- 12. SQL - 帶前導零
- 13. 沒有前導零SQL唯一索引
- 14. 格式.NET DateTime「日」沒有前導零
- 15. 前導零的轉換結果在PHP
- 16. 使用零填充(前導零)將int轉換爲QString
- 17. printf與前導零在C
- 18. TYPO3的RealURL:UID帶前導零
- 19. 瞭解前導零的str_pad()
- 20. 帶前導零的int.Parse()
- 21. 如何使用DB2中的前導零轉換decimal到varchar?
- 22. 帶前導零的數字,使用vb6
- 23. 零位整數,除前導零之外
- 24. SQL導入嚮導丟棄前導零
- 25. řsprintf的最多兩個小數但沒有前導零
- 26. 保持前導零ç
- 27. 前導零計數器
- 28. BigDecimal()省略前導零
- 29. 保持前導零位
- 30. inet_addr函數和前導零
什麼樣的「日期」是'363898,Catullus,84-11-1 BC'?它遵循什麼格式? – 2012-01-30 11:14:13
在我們投入努力解決您的問題之前,請告訴我們您已投入了多少努力。你有什麼嘗試?你讀過什麼文件?你讀過[Python re module documentation](http://docs.python.org/library/re.html)嗎? – 2012-01-30 11:14:47
好吧,如果它只有兩個數字後跟一個逗號(即84或76)與'\\,\ d \ d'匹配,但逗號並未被轉義,我試圖匹配一年。我似乎錯過了一件非常微不足道的事情。 – Sravan 2012-01-30 11:19:34