簡體   English   中英

使用 Python 正則表達式匹配日期和時間

[英]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.

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