python 清理不同日期格式的日期(如3/14/2019、03-14-2019和2015/3/19),方法是将其替换为单一标准格式的日期

ttygqcqt  于 2023-08-02  发布在  Python
关注(0)|答案(2)|浏览(110)

任务是:清理不同日期格式的日期(如3/14/2019,03-14-2019和2015/3/19),将其替换为单一标准格式的日期。
不知道怎么完成

import re

text = "3/14/2019, 03-14-2019, and 2015/3/19"

datePtn = re.compile(r"""(
(\d{1,4}) #group 1
(-|/|\.) #separator group 2
(\d{1,2}) #group 3
(-|/|\.) #separator group 4
(\d{1,4}) #group 5
)""",re.VERBOSE)

matches = []
findallResult = datePtn.findall(text)
for group in findallResult:
    if len(group[1]) > 2:
        dateNew = '/'.join([group[3],group[5],group[1]])
        matches.append(dateNew)
    else:
        dateNew = '/'.join([group[1],group[3],group[5]])
        matches.append(dateNew)

newDates = []
month = ''
day = ''
for date in matches:
    for group in datePtn.findall(date): #group is tuple
        if group[1][0] == "0":
            month = group[1][1]
        else:
            month = group[1]
        if group[3][0] == '0':
            day = group[3][1]
        else:
            day = group[3]
        newDate = '/'.join([month,day,group[5]])
        newDates.append(newDate)
print("new dates")
print(newDates)

oldDates = []
for i in findallResult:
    oldDates.append(i[0])
print("old dates")
print(oldDates)

字符串
我可以得到两个名单与旧的和新的日期。如何创建一个只替换日期的字符串?谢谢你的好意

oalqel3c

oalqel3c1#

dateutil非常适合这个用例。

from dateutil.parser import parse
text = "3/14/2019, 03-14-2019, and 2015/3/19"

pattern = r'(\d+-\d+-\d+|\d+\/\d+\/\d+)'
for match in re.findall(pattern, text):
    dt = parse(match)
    print(dt.strftime('%Y/%m/%d'))

字符串
产出:

2019/03/14
2019/03/14
2015/03/19


只需在strftime调用中替换所需的模式。

93ze6v8z

93ze6v8z2#

我可以得到我想要的结果,但必须单独列出文本中的所有日期格式。

import pyperclip,re

content = str(pyperclip.paste())
dateRegex1 =re.compile(r'''
    (\d{1,2})               
    (/|-)                       
    (\d{1,2})                           
    (/|-)                         
    (\d{4})                             
    ''', re.VERBOSE)
content = dateRegex1.sub(r'\1-\3-\5',content)
dateRegex2 =re.compile(r'''
    (\d{4})               
    (/|-)                       
    (\d{1,2})                           
    (/|-)                         
    (\d{1,2})                             
    ''', re.VERBOSE)
content = dateRegex2.sub(r'\3-\5-\1',content)
print(content)

字符串

相关问题