如何将Python re.findall匹配结果拆分到日期与时间变量中?
解决方法
你的问题出在re.findall的返回结构上:因为正则里写了6个捕获组,所以它会把这6个捕获到的内容打包成一个元组,再放到列表里返回。而你的文本里只有一处datetime.datetime(...),所以列表里只有这一个元组。
要拆分日期和时间,按下面的步骤来:
- 取出元组:从返回的列表里拿到唯一的元组元素
- 切片拆分:元组的前3个元素是日期,后3个是时间,用切片直接拆分
完整代码示例
import re txt = "created_at': datetime.datetime(2023, 1, 17, 11, 38, 26, tzinfo" # 优化正则:用\d+匹配数字,比.+?更精准 x = re.findall(r"datetime\.datetime\((\d+), (\d+), (\d+), (\d+), (\d+), (\d+), tzinfo", txt) if x: # 先确保匹配到结果 # 取出列表里的唯一元组 all_parts = x[0] # 拆分日期和时间 date_parts = all_parts[:3] time_parts = all_parts[3:] # 可选:转成整数元组,方便后续处理 date = tuple(map(int, date_parts)) time = tuple(map(int, time_parts)) print("日期:", date) # 输出 (2023, 1, 17) print("时间:", time) # 输出 (11, 38, 26)
补充说明
你之前用x[0:4]得到整个元组,是因为x是列表,x[0:4]取的是列表的前4个元素,但列表里只有1个元素,所以返回的还是包含那个元组的列表。要操作元组里的元素,必须先通过x[0]拿到元组本身,再对元组做切片。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

