Python3:如何从指定格式日期中提取星期几
嘿,这个需求其实挺容易解决的,两种日期格式里的星期信息要么在字符串开头,要么藏在括号里,咱们可以用两种思路来提取——正则匹配(跨语言通用)或者用日期库解析(更稳妥),我给你具体讲讲:
方法一:正则表达式匹配(跨语言通用)
两种格式里的星期都是3个字母的缩写(比如Thu),我们可以写一个能覆盖两种情况的正则:
匹配模式:^([A-Za-z]{3})|\(([A-Za-z]{3})
- 前半部分
^([A-Za-z]{3})匹配字符串开头的3个字母(对应第二种格式的开头星期) - 后半部分
\(([A-Za-z]{3})匹配括号内的3个字母(对应第一种格式括号里的星期)
拿Python举个例子:
import re # 测试两种格式的日期 date1 = "2007-10-18 11:31:46 -0400 (Thu, 18 Oct 2007)" date2 = "Thu, 18 Oct 2007 11:31:49 -0400" pattern = r'^([A-Za-z]{3})|\(([A-Za-z]{3})' # 提取第一个日期的星期 match_result = re.search(pattern, date1) weekday = match_result.group(2) if match_result.group(2) else match_result.group(1) print(weekday) # 输出: Thu # 提取第二个日期的星期 match_result = re.search(pattern, date2) weekday = match_result.group(2) if match_result.group(2) else match_result.group(1) print(weekday) # 输出: Thu
方法二:日期解析库(以Python为例,更稳妥)
如果用Python的话,借助datetime模块解析日期字符串后,能直接提取星期的缩写或全名,还能避免正则可能出现的匹配错误:
from datetime import datetime # 处理第一种格式 date_str1 = "2007-10-18 11:31:46 -0400 (Thu, 18 Oct 2007)" # 我们可以只解析括号外的日期部分 dt1 = datetime.strptime(date_str1.split('(')[0].strip(), "%Y-%m-%d %H:%M:%S %z") print(dt1.strftime("%a")) # 输出: Thu(3字母缩写) print(dt1.strftime("%A")) # 输出: Thursday(完整星期名) # 处理第二种格式 date_str2 = "Thu, 18 Oct 2007 11:31:49 -0400" dt2 = datetime.strptime(date_str2, "%a, %d %b %Y %H:%M:%S %z") print(dt2.strftime("%a")) # 输出: Thu print(dt2.strftime("%A")) # 输出: Thursday
这里的%a是日期格式化符号,表示星期的3字母缩写,%A则表示完整的星期名称,非常灵活。
如果是其他语言(比如JavaScript、Java),也有对应的日期解析API,核心思路都是先把字符串转成日期对象,再提取星期信息就行啦~
内容的提问来源于stack exchange,提问作者Aiguo
相关产品推荐
相关产品推荐

