Python正则表达式:如何从文本末尾提取最后一个日期?
嘿,作为Python新手遇到这种小问题太正常啦~其实你完全不用纠结复杂的正则,分两种情况给你说最实用的解决办法:
方法1:如果
datelist是真正的Python列表(首选!) 你给出的内容看起来就是标准的Python列表,这种情况根本不需要正则表达式,直接用列表的负索引就能轻松拿到最后一个元素,这是Python里处理列表最基础的操作之一:
# 你的日期列表 datelist = ['2018-02-15 00:48:14 -0800', '2018-02-15 04:15:00 -0800', '2018-02-15 06:19:09 -0800', '2018-02-15 09:53:55 -0800', '2018-02-15 14:02:52 -0800'] # 取最后一个元素 last_date = datelist[-1] print(last_date) # 输出结果:2018-02-15 14:02:52 -0800
简单解释下:Python里列表的[-1]代表取倒数第一个元素,[-2]是倒数第二个,以此类推,比写正则高效太多啦!
方法2:如果
datelist是字符串形式的列表(比如把列表转成了字符串存储) 要是你手里的内容是类似"['2018-02-15...', ...]"的字符串,那才需要用到正则。你之前的正则用了非贪婪匹配.*?,所以会匹配到第一个符合条件的内容,我们可以换两种思路解决:
思路A:直接匹配最后一个日期格式
写一个精准匹配你日期格式的正则,然后定位到]前面的最后一组:
import re # 字符串形式的列表 datestr = "['2018-02-15 00:48:14 -0800', '2018-02-15 04:15:00 -0800', '2018-02-15 06:19:09 -0800', '2018-02-15 09:53:55 -0800', '2018-02-15 14:02:52 -0800']" # 匹配最后一个符合格式的日期 match = re.search(r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} [+-]\d{4})']', datestr) if match: last_date = match.group(1) print(last_date) # 输出结果:2018-02-15 14:02:52 -0800
思路B:先提取所有日期再取最后一个
用re.findall把所有符合格式的日期都提取出来,再用负索引取最后一个,这种方式更灵活,哪怕列表长度变了也能生效:
import re datestr = "['2018-02-15 00:48:14 -0800', '2018-02-15 04:15:00 -0800', '2018-02-15 06:19:09 -0800', '2018-02-15 09:53:55 -0800', '2018-02-15 14:02:52 -0800']" # 提取所有日期 all_dates = re.findall(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} [+-]\d{4}', datestr) # 取最后一个 last_date = all_dates[-1] print(last_date) # 输出结果:2018-02-15 14:02:52 -0800
总结一下:如果是真正的Python列表,优先用方法1,简单又高效;如果是字符串形式的列表,再考虑正则的方法~
内容的提问来源于stack exchange,提问作者Amez
相关产品推荐
相关产品推荐

