Regex для замены дня на предыдущий день - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть следующая строка 2020-02-24daily_report.xlsx, и я хотел бы заменить день только на предыдущий. Я думаю, что правильный способ сделать это - вырезать строку, чтобы отделить дату от остальных, преобразовать ее в формат даты, выполнив минус 1, и вернуть ее вместе с оставшейся частью строки. Любая помощь будет оценена. Я очень плохо знаком с регулярным выражением.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Один заход

from datetime import datetime, timedelta
items =['2020-02-24daily_report.xlsx']
for item in items:
    a = re.match(r'\d+(?:\d+-\d+-\d+)',item).group(0)
    b = (datetime.strptime(a, '%Y-%m-%d').date()- timedelta(days=1))
    print(re.sub(a,str(b),item))

Выход

2020-02-23daily_report.xlsx
0 голосов
/ 26 февраля 2020

Вам не нужно regex, потому что он находится в начале строки и имеет 10 символов - поэтому используйте [:10]

Когда вы получите 2020-02-24 (old_name[:10]), тогда вы можете преобразовать в datetime, вычесть timedelta(days=1), преобразовать обратно в строку 2020-02-23 и объединить с остальной частью имени old_name[10:]

import datetime

old_name = '2020-02-24daily_report.xlsx'

old_date = old_name[0:10]

today = datetime.datetime.strptime(old_date, '%Y-%m-%d')
yesteday = today - datetime.timedelta(days=1)

new_date = yesteday.strftime('%Y-%m-%d')

new_name = new_date + old_name[10:]

print(new_name)

Результат:

2020-02-23daily_report.xlsx
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...