I started you. This is my interpretation of your problem. I leave the implementation of parse_complex to you.
class DateParser(object): """parse dates according to the custom rules here: >>> DateParser("Sat 1 Dec - 11h + 14h / Sun 2 Dec - 12h30").parse() ("Sat 1 Dec 11h", "Sat 1 Dec 14h", "Sun 2 Dec 12h30") >>> DateParser("Tue 27 + Wed 28 Nov - 20h30").parse() ("Tue 27 Nov 20h30", "Wed 28 Nov 20h30") >>> DateParser("Fri 4 + Sat 5 Jan - 20h30").parse() ("Fri 4 Jan 20h30", "Sat 5 Jan 20h30") >>> DateParser("Wed 23 Jan - 20h").parse() ("Wed 23 Jan 20h") >>> DateParser("Sat 26 Jan - 11h + 14h / Sun 27 Jan - 11h").parse() ("Sat 26 Jan 11h", "Sat 26 Jan 14h", "Sun 27 Jan 11h") >>> DateParser("Fri 8 and Sat 9 Feb - 20h30 + thu 1 feb - 15h").parse() ("Fri 8 Feb 20h30", "Sat 9 Feb 20h30", "Thu 1 feb 15h") >>> DateParse("Sat 2 Mar - 11h + 14h / Sun 3 Mar - 11h").parse() ("Sat 2 Mar 11h", "Sat 2 Mar 14h", "Sun 3 Mar 11h") >>> DateParser("Wed 12, Thu 13, Fri 14 and Sat 15 Jun - 19h + Sun 16 Jun - 12h30").parse() ("Wed 12 Jun 19h", "Thu 13 Jun 19h", "Fri 14 Jun 19h", "Sat 15 Jun 19h", "Sun 16 Jun 12h30") """ def __init__(self, line): self.date = line self.dates = self.split_dates(line) self.final = [] self.days = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'] self.mons = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'] def parse(self): if self.is_complex(): self.parse_complex() else: self.parse_simple() return tuple(self.final) def parse_simple(self): """typical formats: Day 00 + Day 01 Mon - 00h00 Day 00 Mon - 00h00 + 01h00 Day 00 Mon - 00h00 / Day 02 Mon - 00h00 """ for date in self.dates: mods = self.split_modifiers(date) date_mods = [] for mod in mods: if self.is_complete(mod):
If you have questions about how I documented this class, feel free to come back to me and I can help you. This problem was a bit more complicated than I thought at first, I need to do something else first.
source share