撰寫 Python 代碼。下面是一些包含日期和時間范圍的示例字串
'Mon-Thu, Sun 11:30 am - 9 pm'
'Sat-Sun 9:30 am - 9:30 pm'
'Sat 5 pm - 9 pm'
我想從上面提取時間范圍,包括 (am/pm) 這將是
11:30am-9pm
9:30am-9:30pm
5pm-9pm
我稍后計劃將其轉換為 24 小時格式。
我嘗試過但沒有用的東西
# try-1
re.findall(r"(?i)(\d?\d:\d\d (?:a|p)m)", st)
# try-2
re.findall(r"(?i)((\d?\d:\d\d|\d) (?:a|p)m)", st)
我不擅長正則運算式。任何使用正則運算式或任何其他方式的幫助將不勝感激。
uj5u.com熱心網友回復:
你走在正確的軌道上。考慮這個版本:
inp = ['Mon-Thu, Sun 11:30 am - 9 pm', 'Sat-Sun 9:30 am - 9:30 pm', 'Sat 5 pm - 9 pm']
output = [re.findall(r'\d{1,2}(?::\d{2})? [ap]m - \d{1,2}(?::\d{2})? [ap]m', x)[0] for x in inp]
print(output) # ['11:30 am - 9 pm', '9:30 am - 9:30 pm', '5 pm - 9 pm']
uj5u.com熱心網友回復:
您可以使用
\b\d?\d(?::\d\d)?\s*[ap]m\s*-\s*\d?\d(?::\d\d)?\s*[ap]m\b
請參閱正則運算式演示。詳情:
(?i)- 不區分大小寫的標志\b- 一個詞的邊界\d?\d- 一位或兩位數字(?::\d\d)?-:和兩個數字的可選出現\s*- 零個或多個空格[ap]m-a或者p然后m\s*-\s*--用零個或多個空格包圍\d?\d(?::\d\d)?\s*[ap]m- 與上面相同的模式\b- 字邊界
看一個Python 演示:
import re
text = '''Mon-Thu, Sun 11:30 am - 9 pm'
'Sat-Sun 9:30 am - 9:30 pm'
'Sat 5 pm - 9 pm'''
time_rx = r'\d?\d(?::\d\d)?\s*[ap]m'
matches = re.findall(fr'\b{time_rx}\s*-\s*{time_rx}\b', text)
for match in matches:
print("".join(match.split()))
輸出:
11:30am-9pm
9:30am-9:30pm
5pm-9pm
uj5u.com熱心網友回復:
我對正則運算式了解不多,但我可以建議:
str = 'Mon-Thu, Sun 11:30 am - 9 pm'
for i in range(len(str)):
if str[i].isdigit():
new_str = str[i:]
break
print(new_str)
如果您在沒有它們的情況下撰寫代碼,則此代碼很好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/370511.html
