博客
关于我
Python之判断字符串是否日期?是日期则输出统一格式。
阅读量:687 次
发布时间:2019-03-16

本文共 1897 字,大约阅读时间需要 6 分钟。

判断一个字符串是否为日期格式并非易事。Python的time模块中的strptime函数是一个有力的工具,可以尝试将字符串解析为时间对象。然而,日期格式的多样性意味着我们需要多次尝试不同的格式模板,确保不会遗漏任何情况。如果字符串包含中文数字,进一步的转换处理可能会变得复杂。

分析

  • 基本方法:使用time.strftime()time.strptime()尝试解析字符串。如果解析成功,则确认为日期格式。

  • 日期格式多样性:日期格式有多种形式,如“2020年11月23日”、“2020-11-23”、“20年1月5日”等。必须将这些格式包含在待测试的模板中。

  • 中文数字处理:转换字符中出现的中文数字为英文数字是一个复杂的任务。例如,“十”应转为“10”,而“廿”可能需要特殊处理。为了简化处理,我们需要先将数字转换为英文形式。

  • 解决方法:遍历字符串,将中文数字替换为英文数字。注意“十”在某些情况下的特殊处理,比如当它单独存在、前面或后面有其他数字时。

  • 测试和优化:编写函数后,应当测试其在不同场景下的表现,并根据反馈不断优化,确保覆盖更多日期格式。

  • 代码示例

    import timedef isdate(datestr):    from time import strptime, strftime    chinesenum = {'一':'1', '二':'2', '三':'3', '四':'4', '五':'5',                '六':'6', '七':'7', '八':'8', '九':'9', '零':'0',                '十':'10'}  # 注意:简化处理,暂不考虑“廿”等特殊情况    strdate = []    for c in datestr:        if c in chinesenum:            if c == '十':                next_char = ''  # 未完善,暂时不处理            # 处理中文数字            strdate.append(chinesenum[c])        else:            strdate.append(c)        date_str = ''.join(strdate)    formats = [        '%Y年%m月%d日',        '%Y-%m-%d',        '%y年%m月%d日',        '%y-%m-%d',        '%m/%d/%Y',        '%d.%m.%Y'    ]    for fmt in formats:        try:            ret = strptime(date_str, fmt)            if ret:                return strftime('%Y年%m月%d日', ret)        except:            continue    return False# 测试用例datelist = [    '2020年11月23日',    '2020-11-23',    '二零二零年十一月二十三日',    '二零年十一月二三日',    '20年1月5日',    '20年01月05日']for date in datelist:    print(isdate(date))

    解释

  • 引入模块:导入time模块中的strptimestrftime用于处理日期字符串。

  • 中文数字转换:创建字典chinesenum将中文数字映射为英文数字。注意处理特殊情况,如“十”的位置。

  • 处理字符串:遍历输入字符串,将中文数字替换为英文数字,保留其他字符。

  • 尝试格式化:使用预定义的日期格式模板,尝试解析转换后的字符串。如果成功,返回解析结果,否则继续下一个模板。

  • 返回结果:如果解析成功,返回日期字符串;否则,返回False

  • 测试用例:对包含不同日期格式的字符串进行测试,验证函数的正确性。

  • 扩展与优化

  • 增加更多格式模板:遇到新的日期格式时,添加到formats列表中。

  • 进一步中文数字处理:比如处理“廿”和其他特殊情况。

  • 日期信息提取:根据需求调整返回的strftime格式。

  • 错误处理:添加更多具体错误处理,确保函数的健壮性。

  • 通过不断测试和优化,可以使这个函数更有效地识别各种日期格式,满足不同场景的需求。

    转载地址:http://uprqz.baihongyu.com/

    你可能感兴趣的文章
    OAuth2.0_授权服务配置_令牌服务和令牌端点配置_Spring Security OAuth2.0认证授权---springcloud工作笔记143
    查看>>
    OAuth2.0_授权服务配置_客户端详情配置_Spring Security OAuth2.0认证授权---springcloud工作笔记142
    查看>>
    OAuth2.0_授权服务配置_密码模式及其他模式_Spring Security OAuth2.0认证授权---springcloud工作笔记145
    查看>>
    OAuth2.0_授权服务配置_资源服务测试_Spring Security OAuth2.0认证授权---springcloud工作笔记146
    查看>>
    OAuth2.0_环境介绍_授权服务和资源服务_Spring Security OAuth2.0认证授权---springcloud工作笔记138
    查看>>
    OAuth2.0_环境搭建_Spring Security OAuth2.0认证授权---springcloud工作笔记139
    查看>>
    oauth2.0协议介绍,核心概念和角色,工作流程,概念和用途
    查看>>
    OAuth2授权码模式详细流程(一)——站在OAuth2设计者的角度来理解code
    查看>>
    OAuth2:项目演示-模拟微信授权登录京东
    查看>>
    OA系统多少钱?OA办公系统中的价格选型
    查看>>
    OA系统选型:选择好的工作流引擎
    查看>>
    OA让企业业务流程管理科学有“据”
    查看>>
    OA项目之我的会议(会议排座&送审)
    查看>>
    OA项目之我的会议(查询)
    查看>>
    Object c将一个double值转换为时间格式
    查看>>
    object detection之Win10配置
    查看>>
    object detection训练自己数据
    查看>>
    object detection错误Message type "object_detection.protos.SsdFeatureExtractor" has no field named "bat
    查看>>
    object detection错误之Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
    查看>>
    object detection错误之no module named nets
    查看>>