3 回答

TA貢獻1796條經驗 獲得超4個贊
您可以使用此正則表達式:
\d{1,2}:\d{2}(\s*[ap]\.?m\.?)?
說明:
\d{1,2}
將匹配 1 或 2 位數字(小時)。:
將匹配文字:
。\d{2}
將匹配精確的 2 位數字(分鐘)。(\s*[ap]\.?m\.?)?
: 要么匹配要么\s*[ap]\.?m\.?
不匹配,因為?
后面的括號?,F在,讓我們分解\s*[ap]\.?m\.?
一下:\s*
將匹配零個或多個空格。\s
對于空白,以及*
零個或多個。[ap]
將期望a
或p
。\.?
將匹配文字.
并?
使其成為可選的。請注意,.
在正則表達式中匹配任何內容,并且要匹配實際 dot.
,您必須執行\.
m
會期待一個m
\.?
再次將匹配一個可選的.
為了不區分大小寫,您可以使用IGNORECASE
標志編譯此正則表達式:
import re r = re.compile(r'\d{1,2}:\d{2}(\s*[ap]\.?m\.?)?', re.IGNORECASE)

TA貢獻1876條經驗 獲得超7個贊
我知道你特別要求使用正則表達式,但如果我沒有指出dateutil解析器是在考慮某種事情的情況下編寫的,那我就失職了。(當然取決于你的最終目標)
它在獲取奇怪的日期/時間/日期時間字符串并將它們轉換為日期時間對象方面做得非常好。
from dateutil.parser import parse
times = [ "1:00PM", "1:00pm", "1pm", "1PM", "1:00 PM", "1:00 AM", "1:00pm", "2:00"]
for t in times:
x = parse(t)
print(f"{x} <--> {t}")
輸出:
2018-11-21 13:00:00 <--> 1:00PM
2018-11-21 13:00:00 <--> 1:00pm
2018-11-21 13:00:00 <--> 1pm
2018-11-21 13:00:00 <--> 1PM
2018-11-21 13:00:00 <--> 1:00 PM
2018-11-21 01:00:00 <--> 1:00 AM
2018-11-21 13:00:00 <--> 1:00pm
2018-11-21 02:00:00 <--> 2:00
添加回答
舉報