dateutil 解析器在应该引发 ValueError 时返回错误日期

问题描述 投票:0回答:1
from dateutil.parser import parse
def convert_to_ddmmyy(date_string):
    try:
        date = parse(date_string)
        formatted_date = date.strftime("%d%m%y")
        return formatted_date
    except ValueError:
        return "Invalid date format"
# Example usage
date_string = "13.75"
converted_date = convert_to_ddmmyy(date_string)
print(converted_date)

这将打印 130623。

我希望将其打印为无效或类似的内容,我可以进行哪些更改? 它必须使用解析器,因为我正在处理各种日期格式,但我需要排除这种格式。

python parsing python-dateutil
1个回答
1
投票

使用正则表达式识别无效格式:模式

\d\d\.\d\d
拒绝格式
'xx.xx'
中的任何字符串,其中 x 是十进制数字。这涉及到您的具体情况。第二个表达式处理一系列格式,如下所述。

import re
from dateutil.parser import parse

def convert_to_ddmmyy(date_string):
    # if re.match(r"\d\d\.\d\d",date_string): # rejects basic pattern xx.xx
    if re.fullmatch(r"\d*\.\d*",date_string): # rejects wider range of similar patterns
       return "Invalid date format"
    try:
        date = parse(date_string)
        formatted_date = date.strftime("%d%m%y")
        return formatted_date
    except ValueError:
        return "Invalid date format"
# Example usage
date_string = "13.75"
converted_date = convert_to_ddmmyy(date_string)
print(converted_date)

给予

Invalid date format

这里有一个解释。

match
在字符串中查找模式并返回 True 或 False。
\d
表示数字。
\
用于使其成为控制值,而不是查找字母
d
;需要
\.
来查找小数点,因为这在正则表达式中使用(接受任何内容)。
*
表示没有或以上。因此,第二个模式查找没有或任何数字、小数点(句号)、没有或任何数字。然而,
match
会拒绝
2023.12.12
(这可能是一个日期),因为它看到模式
2023.12
12.12
;但
fullmatch
检查整个字符串是否与模式匹配,因此会接受该字符串。希望这有用。正则表达式在检查和更改字符串方面有很多用途。

© www.soinside.com 2019 - 2024. All rights reserved.