亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用正則表達式獲取日期和時間

使用正則表達式獲取日期和時間

慕姐8265434 2022-07-19 20:39:05
我正在嘗試從字符串中提取日期和時間,建立該字符串與當前日期和時間之間的增量。我嘗試將正則表達式輸出從列表轉換為字符串,它顯示為 type=string 但格式如下 - ('18:06:39', 'Jan 30 2020')。import refrom datetime import datetime, timedelta, datestring = 'configuration change at 18:06:39 EET Thu Jan 30 2020 by netbrain'chg_date = re.findall(r"(\d{2}:\d{2}:\d{2}) \w+ \w+ (\w{3} \d{2} \d{4})", string)chg_date_str = ''.join(map(str, chg_date))now = datetime.now()now_format = now.strftime("%H:%M:%S, %b %d %y")time_difference = now_format - chg_date_strprint(chg_date_str)print(time_difference)我收到以下錯誤。Traceback (most recent call last):  File "C:/Users/MattSherman/Desktop/Python/y.py", line 15, in <module>    time_difference = now_format - chg_date_strTypeError: unsupported operand type(s) for -: 'str' and 'str'
查看完整描述

3 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

如果要計算時間增量,則需要對datetime實例進行算術運算。您可以使用如下所示的函數將結果轉換findall()為 a :datetimedatetime.strptime()


import re

from datetime import datetime, timedelta, date


string = 'configuration change at 18:06:39 EET Thu Jan 30 2020 by netbrain'

matches = re.findall(r"(\d{2}:\d{2}:\d{2}) \w+ \w+ (\w{3} \d{2} \d{4})", string)

chg_date_str = ' '.join(map(str, matches[0]))

chg_date = datetime.strptime(chg_date_str, "%H:%M:%S %b %d %Y")

now = datetime.now()

time_difference = now - chg_date


print(chg_date_str)

print(time_difference)

輸出:


18:06:39 Jan 30 2020

5 days, 16:34:32.661231


查看完整回答
反對 回復 2022-07-19
?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

你的代碼有很多問題。

  • findall返回元組列表。您應該迭代findall結果或使用search而不是findall

  • 您使用 連接部分數據'',但您需要' '

  • %y是 4 位數年份的錯誤模式,應該使用%Y

  • 您將日期轉換為字符串并嘗試找出兩個字符串之間的差異...

我認為你的代碼應該是這樣的:

import re

from datetime import datetime


string = 'configuration change at 18:06:39 EET Thu Jan 30 2020 by netbrain'

chg_dates = re.findall(r"(\d{2}:\d{2}:\d{2}) \w+ \w+ (\w{3} \d{2} \d{4})", string)

for chg_date in chg_dates:

    chg_date_str = ' '.join(map(str, chg_date))

    chg_date_date = datetime.strptime(chg_date_str, "%H:%M:%S %b %d %Y")

    now = datetime.now()

    time_difference = now - chg_date_date

    print(time_difference)


查看完整回答
反對 回復 2022-07-19
?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

其他人回答了它,但有兩個主要問題。


您試圖從彼此減去 2 個字符串,python 不能這樣做,而是您應該減去 2 個 datetime 對象。此外,re.findall()返回一個長度為 1 的列表,因此當連接chg_date到 a時,chg_date_str您實際上必須連接返回列表中的第 0 個項目,即chg_date_str[0]. 如果您使用 a', '而不是空字符串連接,它看起來也更干凈,當然,相應地更新 datetime 參數。


import re

from datetime import datetime, timedelta, date


string = 'configuration change at 18:06:39 EET Thu Jan 30 2020 by netbrain'

chg_date = re.findall(r"(\d{2}:\d{2}:\d{2}) \w+ \w+ (\w{3} \d{2} \d{4})", string)



chg_date_str = ', '.join(map(str, chg_date[0]))

datetime_object = datetime.strptime(chg_date_str, '%H:%M:%S, %b %d %Y')


time_difference = datetime.now() - datetime_object

print(chg_date_str)

print(time_difference)

輸出:


18:06:39, Jan 30 2020

5 days, 19:05:05.272112

我相信這就是你想要的。


查看完整回答
反對 回復 2022-07-19
  • 3 回答
  • 0 關注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號