python用正则表达式转换文本中的日期格式

分析日期:下列文本里面包含了多个日期,将文本里面出现的日期转换成另外一种格式,如

    2016-10-31  -->  10/31/2016

2016-9-4    -->  09/04/2016

文本如下:

text = '''

    1.   abc  2016-10-31 

    2.   xyz   2016-9-4

    3.   aef   2016-10-aa

    4.    asasf asdf 10-14

    5.  2013-10-3  234234

    6.  1945-8-15 abc  1945

    7.  1972-01-30 asdf  1988-10-1

运行示例如下:

 

import re
import time
import datetime


def validate_date(text):
    '''验证日期格式

    :param text: 待检索文本

    >>> validate_date('2020-05-20')
    True
    >>> validate_date('2020-05-32')
    False
    '''
    try:
        if text != time.strftime('%Y-%m-%d', time.strptime(text, '%Y-%m-%d')):
            raise ValueError
        return True
    except ValueError:
        return False


def validate_datetime(text):
    '''验证日期+时间格式

    :param text: 待检索文本

    >>> validate_datetime('2020-05-20 13:14:15')
    True
    >>> validate_datetime('2020-05-32 13:14:15')
    False
    '''
    try:
        if text != datetime.datetime.strptime(text, '%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d %H:%M:%S'):
            raise ValueError
        return True
    except ValueError:
        return False


def match_date(text):
    '''正则表达式提取文本所有日期

    :param text: 待检索文本

    >>> match_date('日期是2020-05-20 13:14:15.477062.')
    ['2020-05-20']
    '''
    pattern = r'(\d{4}-\d{1,2}-\d{1,2})'
    pattern = re.compile(pattern)
    result = pattern.findall(text)
    return result


def match_datetime(text):
    '''正则表达式提取文本所有日期+时间

    :param text: 待检索文本

    >>> match_datetime('日期是2020-05-20 13:14:15.477062.')
    ['2020-05-20 13:14:15']
    '''
    pattern = r'(\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2})'
    pattern = re.compile(pattern)
    result = pattern.findall(text)
    return result

参考一下,如有帮助,望采纳,谢谢

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

 代码如下:{如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢}。

import re
text = '''
    1.   abc  2016-10-31
    2.   xyz   2016-9-4
    3.   aef   2016-10-aa
    4.    asasf asdf 10-14
    5.  2013-10-3  234234
    6.  1945-8-15 abc  1945
    7.  1972-01-30 asdf  1988-10-1
'''
def fp(r):
    return "{:0>2}/{:0>2}/{:4}".format(r.group(2),r.group(3),r.group(1))
text = re.sub(r'(\d{4})-(\d{1,2})-(\d{1,2})',fp,text)
print(text)