[英]Match dates and hour using Python Regular Expressions
我想匹配具有以下格式的日期和時間:
17/05/2009 8:15
17/5/2009 08:15
17.05.2009 8:15
17-05-2009 8:15
17/05/2009 8:15:00
pat = "^([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$"
我現在已經使用了這種模式,但它不包括小時格式。 如何在這種模式下同時編寫日期格式和時間格式?
謝謝
該正則表達式模式有點難以閱讀,這將使其難以擴展。 我可能會建議使用datetime.strptime
代替:
from datetime import datetime
dates = [
'17/05/2009 8:15',
'17/5/2009 08:15',
'17.05.2009 8:15',
'17-05-2009 8:15',
'17/05/2009 8:15:00',
]
def parse_date(date: str) -> datetime:
for fmt in [
"%d/%m/%Y %H:%M",
"%d.%m.%Y %H:%M",
"%d-%m-%Y %H:%M",
"%d/%m/%Y %H:%M:%S",
]:
try:
return datetime.strptime(date, fmt)
except ValueError:
continue
raise ValueError(f"Couldn't parse '{date}'!")
datetimes = [parse_date(date) for date in dates]
使用這種方法,很容易添加新的fmt
字符串,並且很容易發現漏洞,因為每當您輸入不符合任何這些格式的日期時,您都會收到ValueError
。
如果您想要格式中的強制時間,您可以使用:
^([0]?[1-9]|[1|2][0-9]|[3][0|1])[.\/-]([0]?[1-9]|[1][0-2])[.\/-]([0-9]{4}|[0-9]{2})\s+([01]?\d|2[0-3]):([0-5]?\d)(:[0-5]?\d)?$
如果您希望時間是可選的,您可以使用:
^([0]?[1-9]|[1|2][0-9]|[3][0|1])[.\/-]([0]?[1-9]|[1][0-2])[.\/-]([0-9]{4}|[0-9]{2})(\s+([01]?\d|2[0-3]):([0-5]?\d)(:[0-5]?\d)?)?$
當然,可以根據需要提取的數據(如果有)來更改捕獲組。
話雖如此,在大多數情況下,我會推薦一個日期庫來處理此類事情,盡管有時您可能需要正則表達式,例如用於僅接受正則表達式的框架中的表單驗證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.