Поиск даты, представленной в различных форматах в строке - PullRequest
0 голосов
/ 04 декабря 2018

Ниже код распечатывается только 2 ноября 2018 года;как изменить код, чтобы выбрать оба формата даты.

import re
string = "some text contains 2-Nov-2018 and 3-11-2018"

date = re.findall('\d{1,2}[/-]\D{1,8}[/-]\d{2,4}', string)
print(date)

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Чтобы получить различные форматы даты, импортируйте библиотеку datetime.

 import datetime as dt

fmts = ('%Y','%b %d, %Y','%b %d, %Y','%B %d, %Y','%B %d %Y','%m/%d/%Y','%m/%d/%y','%b %Y','%B%Y','%b %d,%Y')

parsed=[]
for e in txt.splitlines():
    for fmt in fmts:
        try:
           t = dt.datetime.strptime(e, fmt)
           parsed.append((e, fmt, t)) 
           break
        except ValueError as err:
           pass

# check that all the cases are handled        
success={t[0] for t in parsed}
for e in txt.splitlines():
    if e not in success:
        print e    

for t in parsed:
    print '"{:20}" => "{:20}" => {}'.format(*t) 

Источник: : ссылка

0 голосов
/ 04 декабря 2018

Я думаю, что самой простой вещью было бы написать несколько шаблонов.

(Предполагая, что вы просто ищете эти два шаблона - очевидно, вам будет сложнее сделать это самостоятельно, если вы ищете каждый возможный формат даты)

import re

date_string = "some text contains 2-Nov-2018 and 3-11-2018"

formats = [r'\d{1,2}[/-]\D{1,8}[/-]\d{2,4}',   # List of patterns
           r'\d{1,2}[/-]\d{1,2}[/-]\d{2,4}']
dates = re.findall('|'.join(formats), date_string) # Join with | operator

dates

# ['2-Nov-2018', '3-11-2018']

Чтобы стандартизировать даты после этого, вы можете попробовать что-то вроде pandas.to_datetime:

import pandas as pd

dates = ['2-Nov-2018', '3-11-2018']

std_dates = [pd.to_datetime(d) for d in dates]

std_dates

# [Timestamp('2018-11-02 00:00:00'), Timestamp('2018-03-11 00:00:00')]

Как упоминалось внекоторые комментарии, могут быть библиотеки, уже созданные, чтобы сделать все это для васПоэтому, если вы ищете более общий подход, я бы взглянул на эти библиотеки.

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